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


29

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

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

どうもありがとう!

ウディ

回答:


18

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


9

さまざまな理由でファイルシステムを比較したい人がいるので、ここで自分が何を望み、どのようにしたかを書きます。

私は欲しかった:

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

私がしたこと:

最初のスナップショット(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パラメーターを渡して行うことができます。


8

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

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


5

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

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


4

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


1
-rは再帰を意味し、リモートホストに接続しません!
マイケルハンプトン


2

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


0

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

すべてのファイルがコピーされており、それらのファイルモード、所有権、およびSELinuxセキュリティコンテキストを比較したかったのです。

だから私は走った:

rsync -aX /orig /copy/

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.