rsyncが変更されていないファイルとディレクトリを変更するのはなぜですか?

rsyncが変更されていないファイルとディレクトリを変更するのはなぜですか?

名前は同じですが、変更時間が異なる2つのディレクトリを作成する場合:

$ mkdir -p dir1/dir ; sleep 2 ; mkdir -p dir2/dir

$ stat -c %y dir*/dir
2021-09-15 10:54:55.000819360 +0100
2021-09-15 10:54:57.007490593 +0100

その後、オプションrsyncと一緒に使用します。--size-only

$ rsync -rtvh --size-only dir1/ dir2/
sending incremental file list
./
dir/

sent 72 bytes  received 23 bytes  190.00 bytes/sec
total size is 0  speedup is 0.00

寸法は同じなので、どんな変化も期待しません。ただし、修正時間はdir2/dir変更されます。

$ stat -c %y dir*/dir
2021-09-15 10:54:55.000819360 +0100
2021-09-15 10:54:55.000819360 +0100

これは、ファイルサイズが同じでも発生します。

なぜこのようなことをするのですか?

これは、ディレクトリに多くのデータ(他のネストされたディレクトリとファイル)が含まれている場合にも発生する可能性があります。ディレクトリが実際に上書きされたのか、それともrsyncがタイムスタンプを更新しましたか?

ベストアンサー1

Rsyncは、ユーザーが要求したフラグと一致するようにメタデータのみを更新します-t

マニュアルを参照してください(を入力man rsync)、次のガイドラインをお読みください。

Rsyncは、サイズまたは最後の変更時間が変更されたファイルを検索する「クイックチェック」アルゴリズム(デフォルト)を使用して、転送する必要があるファイルを見つけます。クイックスキャンの結果、ファイルのデータを更新する必要がないことが表示された場合は、オプションで要求されたように保持されている他のプロパティへの変更がターゲットファイルに直接適用されます。

この--size-onlyフラグはこの「クイックチェック」アルゴリズムのみを変更し、ファイルを完全にスキップするわけではありません。

- サイズのみ

これは、rsyncが転送する必要があるファイルを見つけるために使用する「クイックチェック」アルゴリズムを変更し、サイズまたは最後の変更時間が変更されたファイルのデフォルト転送からサイズ変更されたファイルのみを取得するように変更します。これは、タイムスタンプを正確に保存できない可能性がある他のミラーリングシステムを使用した後にrsyncの使用を開始するときに便利です。

おすすめ記事