rsyncを使用して、ソースファイルのどの属性が転送を引き起こすターゲットファイルと異なるのか、どうすればわかりますか?

rsyncを使用して、ソースファイルのどの属性が転送を引き起こすターゲットファイルと異なるのか、どうすればわかりますか?

私はrsyncリモートデータ転送とバックアップの目的に大きく依存し、時には他の種類のファイルシステムを使用することもあります。 AFAIKはrsyncデフォルトでファイルサイズと修正タイムスタンプを比較して、転送する必要があるファイルを見つけます。この動作は、フラグを使用してファイルサイズにのみ変更でき--size-only、フラグを使用してファイルチェックサムに置き換えることができます--checksum

時々、私は目的地がソースと同じデータを持っていることを知っているのに、なぜrsync大きなファイルツリーを再送信する必要があるのか​​わかりません。

2つのファイルツリー間の違いを簡単に見つけるのに役立つrsyncオプションまたは類似のオプションはありますか?たとえば、各ファイルに対して、タイムスタンプ、所有者/グループ、権限、ファイルサイズ/内容などのいずれかを印刷できます。

ベストアンサー1

まず、rsyncにそのようなオプションがある場合、私はそれについて知らず、マニュアルページにはありません。これは、必要なものをすばやく提供し、可能なすべてのrsyncユースケースで機能できるため、残念です。

次に、既存のrsyncオプションを使用してこれを実行しようとすると(デフォルトでは--dry-runとできるだけ多くのチェックサム、最新の日付、前の日付、ファイルを組み合わせる必要があります)、削除されて無限ループが発生すると思います。ファイルが削除された可能性のある理由ごとに、1つずつ複数回のパスが必要ですrsyncrsyncこれはあなたの目的にあまり実用的ではないようです。

2つのツリーを比較し、違いを報告し、必要に応じて出力をリンクするツールを使用できる場合は、これはmtreeあなたのニーズを満たすことができます。

mtree2つのディレクトリツリーを比較し、違いを報告するように特別に設計されています。

ソースマシンで、必要なソースツリー(sha256ハッシュを含む)のmtree仕様を生成します。

# mtree -K sha256 -cp /my_path > my_path.mtree

次にrsyncツリーを展開し、リモートシステムでmtreeを実行して、リモートディレクトリツリー/ remote_pathがローカル/ my_pathと一致することを確認します。

# rsync -a --delete /my_path/ remote:/remote_path/
# ssh remote mtree -p /remote_path < my_path.mtree && echo match
match

それでは、リモートツリーを少し修正してみましょう。簡単に言えば、farkleソースに存在しないターゲットファイルを作成し、ファイルを削除しfile.txt、ファイルのタイムスタンプを変更しましたdata.txt

# ssh remote mtree -p remote_path < my_path.mtree || echo fail
.:      modification time (Wed Apr 17 10:49:32 2019, Wed Apr 17 11:55:10 2019)
extra: farkle
data.txt: 
        modification time (Wed Apr 17 10:45:02 2019, Wed Apr 17 11:56:27 2019)
foo:    size (32, 29)
        modification time (Tue Apr 16 10:16:44 2019, Wed Apr 17 11:53:18 2019)
        sha256digest (0x6082aa7261362c4c71c82adf492bc724de53a5814e64b233c43c6775efeb1dd0, 0x2d2537ea27c27dfb2c1690c51c652b9ada32adc29a91b732c24939dcff371cd6)
./file.txt missing
fail

mtreeあなたに知らせます:

  • farkleターゲットには存在しますが、ソースには存在しません。rsyncコマンドラインで--deleteを指定すると削除されます。
  • data.txtコンテンツ(sha256ハッシュ)またはサイズは変更されていませんが、最新のタイムスタンプがあります。チェックサムだけに基づいたコピーはファイルを再転送できず、ターゲットrsyncファイルがソースファイルよりも大きいため、「最新」ファイルのみを転送することはできません。新しい。
  • file.txtターゲットホストに存在せず、rsync特定の除外基準がない場合は、次回の実行時に削除される可能性があります。

だからこれはあなたに直接的な理由を与えませんrsyncからコピーする必要があると思うものをコピーしているのか、なぜコピーしないのかするローカルおよびリモートのディレクトリツリーの実際の条件に関する信頼できる検証可能なレポートを提供します。

my_path.mtreeたとえば、ファイル名に日付スタンプを含む出力ファイルを体系的に保存する場合は、既存のmtree/my_pathツリーを以前の実行(昨日?先週?)と比較してローカルコンピュータで実行することもできます。あなたが考えていなかったローカルな変更です。

mtree一部のUnixディストリビューションに含まれていますが、ディストリビューションにmtreeがない場合は、正常にインストールされました。GitHubのArchie Cobbsバージョン

おすすめ記事