私はrsync
リモートデータ転送とバックアップの目的に大きく依存し、時には他の種類のファイルシステムを使用することもあります。 AFAIKはrsync
デフォルトでファイルサイズと修正タイムスタンプを比較して、転送する必要があるファイルを見つけます。この動作は、フラグを使用してファイルサイズにのみ変更でき--size-only
、フラグを使用してファイルチェックサムに置き換えることができます--checksum
。
時々、私は目的地がソースと同じデータを持っていることを知っているのに、なぜrsync
大きなファイルツリーを再送信する必要があるのかわかりません。
2つのファイルツリー間の違いを簡単に見つけるのに役立つrsyncオプションまたは類似のオプションはありますか?たとえば、各ファイルに対して、タイムスタンプ、所有者/グループ、権限、ファイルサイズ/内容などのいずれかを印刷できます。
ベストアンサー1
まず、rsyncにそのようなオプションがある場合、私はそれについて知らず、マニュアルページにはありません。これは、必要なものをすばやく提供し、可能なすべてのrsync
ユースケースで機能できるため、残念です。
次に、既存のrsyncオプションを使用してこれを実行しようとすると(デフォルトでは--dry-runとできるだけ多くのチェックサム、最新の日付、前の日付、ファイルを組み合わせる必要があります)、削除されて無限ループが発生すると思います。ファイルが削除された可能性のある理由ごとに、1つずつ複数回のパスが必要ですrsync
。rsync
これはあなたの目的にあまり実用的ではないようです。
2つのツリーを比較し、違いを報告し、必要に応じて出力をリンクするツールを使用できる場合は、これはmtree
あなたのニーズを満たすことができます。
mtree
2つのディレクトリツリーを比較し、違いを報告するように特別に設計されています。
ソースマシンで、必要なソースツリー(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バージョン。