からman rsync
:
- 既存の
飛び越える新しいファイルの作成受信機で(強調)
それで私は確かな成功を収めました。
rsync --existing -rtvhP "remote.machine:/photos/*" /photos
これにより、リモートコンピュータの元の写真と一致するように、ローカルコンピュータで変更されたすべての写真をリセットする必要があります。を使用すると、-rt
フォルダを介して再帰し、タイムスタンプがリセットされますが、chowning、chmodding、またはリンクのコピーを気にしないでください。これが -a が実行するアクションです。 )しかし、他のファイルは転送しないでください。変更されていないファイルではなく、何十年も使用されている他のすべてのフォルダやファイルを転送しないでください。
データを変更しましたが、ファイルサイズ/変更タイムスタンプ(rsyncがファイル/フォルダを送信する必要があるかどうかを判断するためにデフォルトで使用されます)を変更しなかった可能性のある変更を識別するために、以下を追加すると思いました。-c
(正しいチェックサム)。
rsync --existing -crtvhP "remote.machine:/photos/*" /photos
私が気づいたのは、ファイル/フォルダが自分のローカル/写真に存在しない場合でも、rsyncが「何もしませんでした」を返すまでに時間がかかることです。私は、これが--existing
ファイルが存在する場合は、実行した操作を続行する前に返された結果(「ファイルが存在しないため何もしない」)を使用しないrsyncのバグだと思います。この場合、何千ものファイルがチェックサム処理されて送信される必要はありません。
ちなみに、私は隠されたdot.folders/dot.filesではなく、見えるファイルだけを転送したいので、photos/*
代わりに使用しています。photos/
これが重要かどうかはわかりませんが、他のUNIXベースのサーバーと通信しているローカルMacのzshでrsyncを実行していますが、これは同種のUbuntuシステム間でも発生することを確認しました。
これが実際にrsyncのバグであれば。これを報告するのに最適な場所がどこにあるかを教えてください。
アドバイス、提案、回答をありがとうございます。
答え1
この例では、rsyncバージョン2.6.9プロトコルバージョン29を使用しています。
ご提案いただいた@Freddyに感謝します。この-c
フラグはrsyncよりも優先されるため、--existing
不要な(IMHO)操作をたくさん実行しているようです。ここに私のテストケースがあります。新しく作成された空のディレクトリについては何もコピーする必要はなく、不要な複数の項目をチェックサムに気にしないと思いましたが、rsyncに他のデフォルト設定があるようです(例:チェックサムチェックサム)。それから使用するかどうかを決定してください。 ) ́\(T)/́
新しい空のフォルダ「test」を作成し、組み込みシェルを使用してtime
13104枚の写真と新しいフォルダの0枚の写真を同期させる各テストケースでrsyncが動作した時間を追跡しました。
% mkdir test
% time rsync -rtvhP --existing photos/* test
building file list ...
13104 files to consider
sent 710.56K bytes received 20 bytes 1.42Mbytes/sec
total size is 912.33G speedup is 1283921.48
rsync -rtvhP --existing photos/* test 0.03s user 0.09s system 37% cpu 0.327 total
% time rsync -rtvhPc --existing photos/* test
building file list ...
13104 files to consider
sent 919.66K bytes received 20 bytes 134.90 bytes/sec
total size is 912.33G speedup is 992002.92
rsync -rtvhPc --existing photos/* test 1201.16s user 210.36s system 20% cpu 1:53:37.01 total
そのため、チェックサムなしでは0.327秒かかりましたが、コピーする必要のないファイルをチェックサムするのに約2時間かかりました。これはrsyncが動作する方法ではありませんが、これがどのように機能するかを知ることをお勧めします。 :-)
答え2
フォローするあなただけの答え確認が優先されるので、--checksum
考慮すべきファイルのリストを提供することで、--existing
より積極的なバージョンを実装できます。--existing
rsync
オリジナル:
rsync --existing -crtvhP "remote.machine:/photos/*" /photos
修正されたバリエーション:
cd /photos &&
find . -type f -print | rsync --dry-run --files-from=- -crtvh --progress 'remote.machine:/photos/' .
Macを使用しているので、GNU以外のバージョンfind
のrsync
。 (私は予期しないファイル名を処理することを好みますfind … -print0 | rsync --from0 …
。)
期待どおりに--dry-run
有効なコマンドがあると確信している場合は、削除してください。