次のファイル構造があります。
...folders/to/copy
...folders/to/mirror
私はやってきた:
rsync --ignore-existing -raz --progress $source $destination
これは、両方のフォルダツリーのすべてのコンテンツを最新の状態に保つのに役立ちます。ただし、24時間前に変更されたファイルに対してのみこれを実行できます。私は次のことを試しました:
rsync -rav `find $source -mtime 1` $destination
問題は、これがファイルツリーを混乱させ、必要な方法で機能しないことです。もっと良い方法がありますか?
「フォルダ」とその中のすべての項目への相対パスを使用して、ある場所から別の場所にファイル構造をバックアップし、24時間経過したファイルだけを残したい(mtime
)。
答え1
これを使用して、find | rsync
次のようにコピーしたいファイルをフィルタリングできます。
src=/source/folders/to/./copy
dst=/destination/mirrored/folders
find "$src/" -type f -mtime +0 -print0 |
rsync --dry-run -a -iv --files-from - --from0 / "$dst"
--dry-run
一連の結果に満足したら削除してください。-iv
より静かな操作が必要な場合は削除してください。
/./
ソースパスの一部は、ファイルパスが保存されるべきポイントを定義することを指摘する必要があります。たとえば、パスがある場合、そのターゲットはに/source/folders/to/./copy/sub/here.txt
なります/destination/mirrored/folders/copy/sub/here.txt
。詳細については、および--files-from
(--relative
)-R
オプションのマニュアルを参照してください。man rsync
ソースパスが相対的な場合でも問題ありません。
このソリューションはfind
GNUまたはその他で利用できます。そのオプション-print0
がない場合は削除することも--from0
できますが。次の議論をご覧ください。-print0
-exec printf '%s\0' {} +
GNU findの-print0に対するPOSIXの置換。