rsync(または他のツール)を使用して、2つのシステム間のファイルタイムスタンプを変更します。

rsync(または他のツール)を使用して、2つのシステム間のファイルタイムスタンプを変更します。

同じファイル構造を持つ2つのシステム(A、B)があります。ファイルは同じですが、場所(B)の1つでファイルタイムスタンプが正しくありません。問題は、BのタイムスタンプのほとんどがAよりも最新の日付に設定されていることです。 rsync(または他のツール)を使用してこの問題を解決する方法はありますか?

問題は、変更しないとrsync -azEX --delete A B日付にファイルが最新バージョンで表示されるため、B側で修正が行われないことです(そして、ファイル構造全体を転送することは避けたいオプションです)。

答え1

AB他のシステムを代表し、ローカルファイルシステムの一部でない場合は、メタrsyncデータのみが送信されます。ただし、チェックサムが正しいことを確認するために両側からファイルを読み込みますが、ファイルの他の部分だけを転送します。

rsync -azX /some/path/ user@remote:/target/path

両方のコンテンツが同じであることを保証できる場合は、時間チェックをオフにしてもまだタイムスタンプ値を渡すことができます。これにより、両側からファイルメタデータを読み取ることができますが、ファイルの内容は読み取られません。

ファイルサイズが異なる場合は、rsyncファイルのどの部分を転送する必要があるかを確認するためにチェックサムが両側で再実行されます。アカウントに。

rsync -azX --size-only /some/path/ user@remote:/target/path

実際の例として、ロンドンで非常に遅いリンク(1Mbit/s)を通じてロンドンからアムステルダムに600MBファイルが転送されています。明らかに、オリジナルはかなり長い時間がかかりました。ファイルをコピーしてタイムスタンプをリセットしました。提案#1は約10秒かかります。提案#2は1秒もかかりません。どちらもファイルコンテンツを転送しません。

答え2

AまたはBに壊れたシンボリックリンクがないと仮定すると、次のことが推奨されます。mtree:

$ mtree -Pcp A -k time | ssh hostB mtree -Ptp B

これは、ファイル階層で見つかったタイムスタンプに基づいてツリー仕様を生成し、その仕様を使用してホスト上のA階層でそのファイルのタイムスタンプを設定します。BhostB

関連情報