スクリプトでfindとrsyncを使用したいと思います。

スクリプトでfindとrsyncを使用したいと思います。

cronで実行され、特定のファイル名へのパスを取得するスクリプトを作成しようとしています。パスに同じファイル名を持つフォルダがある場合があります。そのエントリが見つかり、2日以上経過した場合は、親フォルダとすべてのコンテンツをrsyncします。この部分はうまくいきますが、2日より古い "filename.txt"だけを同期します。

#!/bin/sh
find /path/ -name "filename.txt" -type f -mmin -$((60*48)) -exec rsync --ignore-exsiting -az --log-file=/path/ {} /source /destination \;

答え1

私はそれを通して仮定しています親フォルダ私はfilename.txtがあるフォルダを意味しました。

-printf '%h\n'-execを使用する代わりに、findを使用してこのフォルダ名を印刷できます。これをシェルループまたはxargsにパイプできます。たとえば、次のようになります。

find /path/ -name "filename.txt" -type f -mtime -2 -printf '%h\n' |
  xargs -i rsync ... {} /destination \;

私の考えでは、これをrsyncに追加する必要があるようです-R。それ以外の場合は、すべてのディレクトリがターゲットに積み重ねられます。

関連情報