rsyncを使用してターゲットにすでに存在するソースファイルを削除する

rsyncを使用してターゲットにすでに存在するソースファイルを削除する

rsyncサーバーAの特定のディレクトリにあるすべてのファイルをサーバーBの場所に定期的に転送するcronジョブがあります。ファイルが大きいため、--partialandを使用してください。また、ファイルを転送するときにサーバーAのファイルを削除するためにも--append-verifyこのオプションを使用します。remove-source-filesマニュアルページによると、rsyncソースファイルは特定の実行ですべてのファイル転送が完了した後にのみ削除されます。

一部のファイルが転送された後にネットワークエラーが原因で転送が途中で中断されない限り、ほとんどの場合うまく機能します。次の実行時に、プログラムは一部のファイルがターゲットにすでに存在することを確認し、そのファイルを再送信する必要がないと正しく決定します。ただし、転送実行の一部ではないため、ソースサーバーのファイルは削除されません。時間の経過とともに徐々に増加します。

ソースファイルがターゲットに存在する場合、rsync後続の実行でそのファイルを削除する方法はありますか?それとも直接スクリプトを作成してこの問題を解決する必要がありますか?

答え1

正直なところ、これは要求された結果を得るためのハッキング的な方法なので、実際には答えではありません。だからここにあります:

そのコマンドを削除し--append-verifyてこの--updateコマンドに置き換える場合は、他のすべてのオプションを維持し、このコマンドなしでRSYNCを実行してください。

変更されたファイルのコピー中は、すべてのソースファイルが削除されます。

答え2

私は最近簡単な方法を見つけました。

rsync -rav --remove-source-files --backup-dir=<BAK> <SRC> <DST>

DSTに存在し、「変更された」と検出されたすべてのファイルはBAKに移動されます。これで、SRCフォルダを削除してBAKを新しいソースフォルダとして処理できるようになりました。

関連情報