36時間(2200分)未満のファイルのみを同期するには、次のコマンドを使用します。
sudo su -c "rsync -vrt --delete --rsync-path='sudo rsync' --files-from=<(find '/home/dir1' -mmin -2200 -exec basename {} \;) '/home/dir1' Maildir"
36時間を超えても、特定のサブディレクトリ内のすべてのファイルをインポートすることを除いて機能します。これは、これらのサブディレクトリが36時間以内に作成されなかったためです。
そのため、find
コマンドを--files-from
次のように修正しました。
find '/home/dir1' -type f -mmin -2200 -exec basename {} \;
今新しい質問がありました。ファイルを保存できず、次のようなエラーがたくさん発生して失敗します。
rsync: link_stat "/home/dir1/new/blah" failed: No such file or directory (2)
1つのrsyncを実行してディレクトリを作成し、別のrsyncを実行してファイルを転送することに加えて、この問題を解決する他の方法はありますか?
答え1
まあ、これで遊んで他の場所でさまざまな提案をまとめた後、私は次の結論を下しました。
sudo su -c "rsync -vrt --delete --from0 --files-from=<(cd /home/dir; find . -type f -mmin -2200 -print0 ) '/home/dir1' Maildir"
これは、コマンドを実行する前にcd
まずソースディレクトリに移動しますfind
。また、findコマンドのnull終了出力を解析できるようにrsyncに引数を追加する-print0
代わりに、findコマンドに引数を使用しました。-exec basename {}
--from0