1. ホーム
  2. rsync

[解決済み] rsync: -size-onlyと--ignore-timesの違い。

2022-06-22 04:10:42

質問

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

rsync --size-only

rsync --ignore-times

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

両方のオプションは、少なくとも口頭では、同じ結果になるように見えます。 サイズのみでの比較 .

何か微妙なことを見逃していませんか?

どのように解決するのですか?

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

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

同じサイズのファイルはまだ変更されている可能性があります。1 つの簡単な例は、テキスト ファイルでタイプミスを修正する場合です ("teh" を "the" に変更するなど)。ファイル サイズは同じですが、修正後のファイルの方が新しいタイムスタンプを持ちます。 --size-only は、quot; don't look at the time; if size matches assume files match" と言っていますが、これはこの場合間違った選択でしょう。

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

--ignore-times は、ファイルが同じ修正時刻を持っているかどうかに関係なく、ファイルを比較するように言っています。上記のタイプミスの例を考えてみましょう。しかし、その場合、タイプミスを修正しただけでなく、その後に touch を使用して、修正したファイルが元のファイルと同じ修正時刻を持つようにしました。さて --ignore-times はファイルの diff を取得します。 であっても はサイズと時間が一致しても