web-dev-qa-db-ja.com

完全なディレクトリ構造を比較(diff)する最良の方法は?

ディレクトリ構造を比較する最良の方法は何ですか?

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スクリプトのアイデア)でもかまいません。

どうもありがとう!

ウディ

29
Adam Matan

お探しのツールは rdiff です。これは、rsyncとdiffを組み合わせたように機能します。比較または配布できるパッチファイルを作成します。

18
brianegge

さまざまな理由でファイルシステムを比較したいという人もいるので、ここで私が何を望み、どのように実行したかを説明します。

私は欲しかった:

  • 同じファイルシステムをそれ自体と比較するには、つまりsnapshotmake changessnapshotcompare.
  • 追加または削除されたファイルのリストは、内部ファイルの変更を気にしませんでした。

私がしたこと:

最初のスナップショット(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をエコーし​​ました。

10
Camilo Martin

Beyond Compare 3( Scooter Software )をお試しください。WindowsとLinux用のバージョンがあります。一度使用すると、他のファイル比較ツールを使用することはおそらくなくなります。

9
Tim Long

別のツールをインストールしたくない場合...

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にはない」などと表示することもできますが、その時点で、他の人が話しているツールをインストールするだけでもかまいません...

8
chris

私は過去に dirdiff を使用してディレクトリ構造を比較しました。ローカルのディレクトリでのみ機能するため、他のディレクトリをsshfs- mountする必要があります。

良い点は、ファイルが等しいかどうか、どのファイルが新しいか古いかを視覚的に確認できることです。また、最大5つのディレクトリをサポートします。相違点を確認し、ファイルを一方から他方にコピーすることもできます。

5
chmeee

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.

これが役立つかもしれません。

4

diff -rは実際には非常にうまく機能します。違いの実際の内容ではなく、ファイルが異なるかどうかだけを知りたい場合は、diff -qr

4
AlexB

そのためにMeldを使用します。

3
pupeno

Windowsで既に言及されているツールに加えて、Total CommanderまたはWinSCPを使用できます。どちらも、ディレクトリを比較(および同期)するための非常に快適な機能を備えています。

2
Freedom Fighter

新しいものをインストールしたくなかったので、私のソリューションは少し粗雑ですが、すばやく効果的です。

すべてのファイルがコピーされ、それらのファイルモード、所有権、およびSELinuxセキュリティコンテキストが変更されていないことを比較したいと思いました。

だから私は走った:

rsync -aX /orig /copy/

そして、次のように比較します:

cd /orig && ls -lZR > /tmp/diff_orig
cd /copy && ls -lZR > /tmp/diff_copy
vimdiff /tmp/diff_*

両方のファイルのコンテンツが折りたたまれたままの場合、それらは同一です。そうでない場合は、差分が表示されます。

lsのパラメーターを更新して、確認する必要がある属性を反映させます。 YMMV

0
helvete