ディレクトリ構造を比較する最良の方法は何ですか?
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スクリプトのアイデア)でもかまいません。
どうもありがとう!
ウディ
お探しのツールは rdiff です。これは、rsyncとdiffを組み合わせたように機能します。比較または配布できるパッチファイルを作成します。
さまざまな理由でファイルシステムを比較したいという人もいるので、ここで私が何を望み、どのように実行したかを説明します。
最初のスナップショット(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 '^(@@|\+\+\+|---)'
良い点は、これがデフォルトのシステムバイナリをほとんど使用することです。コンテンツに基づいて比較することは、find
an -exec
パラメータは、ファイルパスとその後にMD5をエコーしました。
Beyond Compare 3( Scooter Software )をお試しください。WindowsとLinux用のバージョンがあります。一度使用すると、他のファイル比較ツールを使用することはおそらくなくなります。
別のツールをインストールしたくない場合...
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とexecまたはfindとxargsで行うことができます。また、diffの出力をきれいにして、「このファイルはHost1にあるがHost2にはない」などと表示することもできますが、その時点で、他の人が話しているツールをインストールするだけでもかまいません...
私は過去に dirdiff を使用してディレクトリ構造を比較しました。ローカルのディレクトリでのみ機能するため、他のディレクトリをsshfs
- mountする必要があります。
良い点は、ファイルが等しいかどうか、どのファイルが新しいか古いかを視覚的に確認できることです。また、最大5つのディレクトリをサポートします。相違点を確認し、ファイルを一方から他方にコピーすることもできます。
Rsyncのmanページから:
-n, --dry-run
This makes rsync perform a trial run that doesn’t make any changes (and produces mostly
the same output as a real run). It is most commonly used in combination with the -v,
--verbose and/or -i, --itemize-changes options to see what an rsync command is going to
do before one actually runs it.
これが役立つかもしれません。
diff -r
は実際には非常にうまく機能します。違いの実際の内容ではなく、ファイルが異なるかどうかだけを知りたい場合は、diff -qr
そのためにMeldを使用します。
Windowsで既に言及されているツールに加えて、Total CommanderまたはWinSCPを使用できます。どちらも、ディレクトリを比較(および同期)するための非常に快適な機能を備えています。
新しいものをインストールしたくなかったので、私のソリューションは少し粗雑ですが、すばやく効果的です。
すべてのファイルがコピーされ、それらのファイルモード、所有権、およびSELinuxセキュリティコンテキストが変更されていないことを比較したいと思いました。
だから私は走った:
rsync -aX /orig /copy/
そして、次のように比較します:
cd /orig && ls -lZR > /tmp/diff_orig
cd /copy && ls -lZR > /tmp/diff_copy
vimdiff /tmp/diff_*
両方のファイルのコンテンツが折りたたまれたままの場合、それらは同一です。そうでない場合は、差分が表示されます。
ls
のパラメーターを更新して、確認する必要がある属性を反映させます。 YMMV