rsyncを使用して小さなファイルのみを上書きする方法

rsyncを使用して小さなファイルのみを上書きする方法

rsync次のように再帰を使用してディレクトリをコピーしようとしました。

rsync -a /src/* /dst
  • /src含むsample.png (0.5MB)

  • /dst含むsample.png (1MB)

すべて同じタイムスタンプを持ちます。さて、コマンドを実行すると、rsyncもちろん1MBがsample.png0.5MBで上書きされるsample.pngのを避けたいと思います。

rsync大きなファイルだけをコピーする必要があると言える方法はありますか?

ベストアンサー1

rsyncこの転送条件はデフォルトではサポートされていませんが、オプションがあります効果的にそれでもあなたが望む行動がありますこれは効率的ではありません。このオプションの意図した使用をある程度拡張します。したがって、慎重に使用して本番環境で使用する前に、重要ではないテストケースを確認してください。

このオプションはと呼ばれます--append-verify

rsync説明するためにマンページを引用し、次の--appendオプションから始めます。

--append

これにより、rsync は、受信側にすでに存在するデータが送信側のファイルの先頭と同じであると仮定し、ファイルの末尾にデータを追加してファイルを更新します。 ファイルを転送する必要がありますが、受信者のファイルサイズが送信者のファイルサイズと同じか長い場合は、ファイルをスキップします。

つまり、この--appendオプションは名前が示すように、元のファイルは最後に追加するまで変更されないと仮定し、宛先のファイルよりも小さい元のファイルはスキップされるため、ファイルを上書きしません。ターゲットに小さなファイルがあるソースにあります。

これは、そのオプションの内部動作を完全には確信できず、ファイルの「追加された」部分(つまり、前の部分があるかどうかにかかわらず、最後のバイトの次の部分だけがターゲットに存在する)を意味するためです。本当に同じです)実際に上記の内容が移動されたのでお勧めします。

  • useは、--append-verifyマニュアルページに記載されているようにファイルの最初の部分に違いがある場合、転送後の確認中にファイル全体の内容を含めます(オプション先験的に同じとみなされます)。私が理解しているように、「追加」部分だけが最初に実際に送信される場合でも、検証が考慮されます。すべてのコンテンツファイルの場合、ファイルが実際に「追加を介して大きくなる」場合にのみ同じ部分が異なり、ファイル全体が再送信され、正しいコピーが作成されます。これはもちろん、不要なデータ転送を意味するので、これらの非効率性について警告します。

  • 必要なファイルにのみこの特定のオプションを使用してください。例では、sample.png徹底的に確認してください。本物予想される操作を実行し、rsync「一般」オプションを使用して他のすべてのファイルをコピーします。

おすすめ記事