133

2つのオプションの違いを理解しようとしています

rsync --size-only

rsync --ignore-times

デフォルトでは、rsyncはタイムスタンプとファイルサイズの両方を比較して、ファイルを同期する必要があるかどうかを判断することを理解しています。上記のオプションを使用すると、ユーザーはこの動作に影響を与えることができます。

どちらのオプションも、少なくとも口頭では同じ結果になるようです。サイズのみで比較します

ここで微妙な何かが欠けていますか?

4

4 に答える 4

126

rsync がファイルを比較する方法はいくつかあります。信頼できる情報源は、rsync アルゴリズムの説明です: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf。rsyncに関するウィキペディアの記事も非常に優れています。

ローカル ファイルの場合、rsync はメタデータを比較し、コピー元とコピー先の間でサイズとタイムスタンプが一致するため、ファイルをコピーする必要がないように見える場合は、それ以上調べません。それらが一致しない場合、それはファイルです。しかし、メタデータは一致するが、ファイルが実際には同じでない場合はどうなるでしょうか? 次に、rsync はおそらく意図したとおりに動作しませんでした。

同じサイズのファイルでも変更されている可能性があります。簡単な例の 1 つは、「teh」を「the」に変更するなど、タイプミスを修正するテキスト ファイルです。ファイル サイズは同じですが、修正されたファイルのタイムスタンプは新しくなります。--size-only「時間を見ないでください。サイズが一致する場合、ファイルが一致すると仮定します」と述べていますが、この場合、これは間違った選択です。

一方、cp -r A B昨日、誤って大きな操作を行ったものの、タイム スタンプを保持するのを忘れていたため、逆の操作を実行したいとしますrsync B A。cp したすべてのファイルには、昨日実際に変更されていなくても、昨日のタイムスタンプがあり、rsync はデフォルトでこれらのファイルをすべてコピーし、タイムスタンプも昨日に更新します。--size-onlyこの場合、あなたの友達かもしれません (上記の例のモジュロ)。

--ignore-timesファイルの変更時刻が同じかどうかに関係なく、ファイルを比較するように指示します。上記のタイプミスの例を考えてみましょう。しかし、タイプミスを修正しただけでなくtouch、修正したファイルを元のファイルと同じ変更時間にするために使用していました。サイズと時間が一致していても--ignore-times、ファイルの差分を作成します。

于 2012-12-08T16:18:52.593 に答える
53

rsync がチェックサムによってファイルを比較できることも見逃しています。

--size-onlyタイムスタンプが異なっていても、rsync はサイズが一致するファイルをスキップすることを意味します。これは、デフォルトの動作よりも少ないファイルを同期することを意味します。ファイル全体のサイズに影響を与えない変更を含むファイルはすべて見逃されます。ファイルを変更せずにファイルの日付を変更するものがあり、それらのファイルが変更されていないことを検出するために rsync がそれらのファイルのチェックサムに多くの時間を費やしたくない場合、これは使用するオプションです。

--ignore-timesタイムスタンプとファイルサイズが一致していても、rsync はすべてのファイルのチェックサムを行うことを意味します。これは、デフォルトの動作よりも多くのファイルを同期することを意味します。ファイル サイズが同じで、変更日時が元の値にリセットされている場合でも、ファイルへの変更が含まれます。すべてのファイルのチェックサムは、ディスクから完全に読み取る必要があることを意味し、これは遅くなる可能性があります。一部のビルド パイプラインは、タイムスタンプを特定の日付 (1970-01-01 など) にリセットして、タイムスタンプを保存する tar ファイルにパックされた場合など、最終的なビルド ファイルが少しずつ再現可能であることを保証します。

于 2014-10-16T15:25:43.343 に答える
1

Scientific Linux 6.7 システムでは、rsync のマニュアル ページに次のように記載されています。

--ignore-times          don't skip files that match size and time

内容は同じですが、作成日が異なる 2 つのファイルがあります。

[root@windstorm ~]# ls -ls /tmp/master/usercron /tmp/new/usercron
4 -rwxrwx--- 1 root root 1595 Feb 15 03:45 /tmp/master/usercron
4 -rwxrwx--- 1 root root 1595 Feb 16 04:52 /tmp/new/usercron

[root@windstorm ~]# diff /tmp/master/usercron /tmp/new/usercron
[root@windstorm ~]# md5sum /tmp/master/usercron /tmp/new/usercron
368165347b09204ce25e2fa0f61f3bbd  /tmp/master/usercron
368165347b09204ce25e2fa0f61f3bbd  /tmp/new/usercron

では--size-only、2 つのファイルは同じと見なされます。

[root@windstorm ~]# rsync -v --size-only -n  /tmp/new/usercron /tmp/master/usercron

sent 29 bytes  received 12 bytes  82.00 bytes/sec
total size is 1595  speedup is 38.90 (DRY RUN)

では--ignore-times、2 つのファイルは異なるものと見なされます。

[root@windstorm ~]# rsync -v --ignore-times -n  /tmp/new/usercron /tmp/master/usercron
usercron

sent 32 bytes  received 15 bytes  94.00 bytes/sec
total size is 1595  speedup is 33.94 (DRY RUN)

--ignore-timesそのため、まったく効果がないように見えます。

于 2016-02-16T16:37:26.577 に答える