rsync ファイルの重複無視が期待どおりに動作しない

rsync ファイルの重複無視が期待どおりに動作しない

rsync の動作がよくわかりません。私が実行したことと期待したことは次のとおりです。

「sbck」と「dbck」という名前の2つのフォルダーを作成しました。

シナリオ 1:

という名前のファイルを作成しa.txt、 を使用してそのコピーを作成しましたcp -rp a.txt aa.txt。両方のファイルをsbckフォルダーに配置しました。次に、 を実行しましたrsync -rvch sbck/ dbck/。これにより、両方のファイルが dbck に移動されました。

質問: a.txt と aa.txt はどちらも同じなのに、なぜ rsync はこのコピーを許可するのでしょうか? どちらか一方だけが許可されるべきではないでしょうか?

シナリオ2:

という名前のファイルを作成しa.txt、 を使用してそのコピーを作成しましたcp -rp a.txt aa.txt。両方のファイルをsbckフォルダに配置しました。次に、 を実行しましたcp -rp sbck/a.txt dbck/。その後、 を実行しましたrsync -rvch sbck/ dbck/。これにより、 がaa.txtdbck に移動されました。

質問: a.txt と aa.txt は同じで、すでに a.txt を dbck に移動しました。なぜ rsync は aa.txt を dbck にコピーすることを許可するのでしょうか? このシナリオでは -c はどのように役立つのでしょうか?

答え1

-c何をするかについて誤解していると思います。rsyncオプションの有無にかかわらず、ファイルの重複排除は行われません-c。行われるのは、宛先でファイルを更新する必要があるかどうかを決定する-c方法を変更することだけですrsync

およびsbck/a.txtdbck/a.txt、 を実行するとしますrsync -rvh sbck/ dbck/(注:-cオプションなし)。では、これら 2 つのファイルのサイズと変更時刻が比較され、一致する場合はファイルの内容も一致すると想定され、へのrsyncコピーは行われません。sbck/a.txtdbck/a.txt

ここで、rsync -rvch sbck/ dbck/(この時間で-c) を実行するとします。今回は、は とrsyncのチェックサムを計算し、それら (サイズと変更時間ではなく) を使用して、ファイルが同じかどうか、したがって の新しい内容を にコピーする必要がないかどうかを判断します。 のチェックサムは、ソース ツリーまたは宛先ツリーの他のファイルのチェックサムと比較されません。sbck/a.txtdbck/a.txtsbck/a.txtdbck/a.txtsbck/a.txt

関連情報