rsync
次のように再帰を使用してディレクトリをコピーしようとしました。
rsync -a /src/* /dst
/src
含むsample.png (0.5MB)
/dst
含むsample.png (1MB)
すべて同じタイムスタンプを持ちます。さて、コマンドを実行すると、rsync
もちろん1MBがsample.png
0.5MBで上書きされるsample.png
のを避けたいと思います。
rsync
大きなファイルだけをコピーする必要があると言える方法はありますか?
答え1
rsync
この転送条件はデフォルトではサポートされていませんが、オプションがあります効果的にそれでもあなたが望む行動がありますこれは効率的ではありません。このオプションの意図した使用をある程度拡張します。したがって、慎重に使用して本番環境で使用する前に、重要ではないテストケースを確認してください。。
このオプションはと呼ばれます--append-verify
。
rsync
説明するためにマンページを引用し、次の--append
オプションから始めます。
--append
これにより、rsync は、受信側にすでに存在するデータが送信側のファイルの先頭と同じであると仮定し、ファイルの末尾にデータを追加してファイルを更新します。 ファイルを転送する必要がありますが、受信者のファイルサイズが送信者のファイルサイズと同じか長い場合は、ファイルをスキップします。。
つまり、この--append
オプションは名前が示すように、元のファイルは最後に追加するまで変更されないと仮定し、宛先のファイルよりも小さい元のファイルはスキップされるため、ファイルを上書きしません。ターゲットに小さなファイルがあるソースにあります。
これは、そのオプションの内部動作を完全には確信できず、ファイルの「追加された」部分(つまり、前の部分があるかどうかにかかわらず、最後のバイトの次の部分だけがターゲットに存在する)を意味するためです。本当に同じです)実際に上記の内容が移動されたのでお勧めします。
useは、
--append-verify
マニュアルページに記載されているようにファイルの最初の部分に違いがある場合、転送後の確認中にファイル全体の内容を含めます(オプション先験的に同じとみなされます)。私が理解しているように、「追加」部分だけが最初に実際に送信される場合でも、検証が考慮されます。すべてのコンテンツファイルの場合、ファイルが実際に「追加を介して大きくなる」場合にのみ同じ部分が異なり、ファイル全体が再送信され、正しいコピーが作成されます。これはもちろん、不要なデータ転送を意味するので、これらの非効率性について警告します。必要なファイルにのみこの特定のオプションを使用してください。例では、
sample.png
徹底的に確認してください。本物予想される操作を実行し、rsync
「一般」オプションを使用して他のすべてのファイルをコピーします。