ディレクトリ構造を比較する最良の方法は何ですか?
私はバックアップユーティリティを使用していますrsyncソースとバックアップ間の正確な違い(ファイル サイズと最終変更日に関して)を知りたいです。
何かのようなもの:
Local file Remote file Compare
/home/udi/1.txt (date)(size) /home/udi/1.txt (date)(size) EQUAL
/home/udi/2.txt (date)(size) /home/udi/2.txt (date)(size) DIFFERENT
もちろん、ツールは既成のものでも、Python スクリプトのアイデアでも構いません。
どうもありがとう!
ウディ
答え1
あなたが探しているツールはrdiffrsync と diff を組み合わせたような動作をします。比較したり配布したりできるパッチ ファイルを作成します。
答え2
さまざまな理由でファイルシステムを比較したい人もいるため、ここでは私が何を望んでいたか、どのように比較したかを記述します。
私は欲しかった:
- 比較すると同じファイルシステムそれ自体、すなわち、スナップショット、変更を加える、スナップショット、比較する。
- 追加または削除されたファイルのリスト。内部ファイルの変更は考慮されません。
私がしたこと:
最初のスナップショット(before.sh
スクリプト):
find / -xdev | sort > fs-before.txt
2 番目のスナップショット (after.sh
スクリプト):
find / -xdev | sort > fs-after.txt
比較するには(diff.sh
スクリプト):
diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'
良い点は、これがデフォルトのシステム バイナリをほぼ使用していることです。コンテンツに基づいて比較するには、ファイル パスとその後の MD5 をエコーするパラメーターfind
を渡す必要があります。-exec
答え3
別のツールをインストールしたくない場合は...
for host in host1 host2
do
ssh $host '
cd /dir &&
find . |
while
read line
do
ls -l "$line"
done ' | sort > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"
そして、はい、for ループで find を使用するのと同じくらい簡単に、find と exec または find と xargs で実行できます。また、diff の出力を「このファイルは host1 にありますが、host2 にはありません」などのように表示するように設定することもできますが、その時点では、他のみんなが話しているツールをインストールしたほうがよいでしょう...
答え4
diff -r
実際にはかなりうまく機能します。ファイルが異なるかどうかだけを知りたい場合、違いの実際の内容ではなく、次のようにします。diff -qr