ディレクトリ間の違いを比較する方法(Linux)


24

以前のバックアップからのディレクトリと最新のバックアップからのディレクトリの2つのディレクトリがあります。Linuxの最新のバックアップからディレクトリ内のファイルに加えられた変更を比較するにはどうすればよいですか?また、たとえばテキストやPHPファイルで変更を表示するにはどうすればいいですか?ウィキペディアの改訂履歴など、画面の一方に古いバージョンが表示され、他方に最新バージョンが表示され、変更が強調表示されます。どうすればそのようなことを達成できますか?

編集:リモートディレクトリとローカルを比較するにはどうすればよいですか?

回答:


35

diffのmanページから:

from-fileとto-fileの両方がディレクトリの場合、diffは両方のディレクトリの対応するファイルをアルファベット順に比較します。-rまたは--recursiveオプションが指定されていない限り、この比較は再帰的ではありません。diffは、ディレクトリの実際の内容をファイルであるかのように比較することはありません。完全に指定されたファイルは標準入力ではない場合があります。これは、標準入力には名前がなく、「同じ名前のファイル」という概念が適用されないためです。

ディレクトリを比較するには: diff --brief -r dir1 dir2

ファイルを並べて比較するには: diff --side-by-side file1 file2


非常にクールな、私はそれを試してあげる
フィル

...リモートディレクトリとローカルディレクトリをどのように比較するのでしょうか?
フィル

1
リモートディレクトリをローカルマシンにマウントする必要があります。ただし、次のようにファイルをリモートで比較できます。ssh REMOTE_SERVER "cat / path / to / some / file" | diff --side-by-side / path-to-some-file-もう1つ、入力を保存する場合、 'sdiff'コマンドは 'diff --side-by-side'のように機能します。
ショーンスターツ

2
NFSを使用して、リモートディレクトリをマウントします。リモートサーバー(server-b)で、/ etc / exportsを編集し、次のファイルをその中に配置します。/ path / of / directory / to / share server-a.ip.address(ro、no_root_squash)server-bでNFSを開始します(/etc/init.d/nfs start)以下を/ etc / fstabに追加して、ローカルサーバー(server-a)にマウントします:server-b.ip.add:/ path / of / directory / to / share / mnt / server-b nfs rsize = 32768、wsize = 32768、rw 0 0 server-aでは、mkdir / mnt / server-b; mount / mnt / server-b投票してくれてありがとう。
ショーンスターツ

2
sshfsNFSを使用する代わりに、アドホック一時ネットワークディレクトリを作成するために使用できます。
ダンアンドレッタ

3

想定:

  • 私たちはオンですwww1、リモートと比較してwww2
  • ローカルwww1からリモートへの公開鍵認証がありますwww2
  • ローカルwww1とリモートの同じユーザーとして比較しますwww2
find / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / exclude_this dir"> local.md5
ssh www2 "find / var / www / html / -name '*' -exec md5sum -b {} \; | grep -v / var / www / html / exclude_this dir> remote.md5"
scp www2:remote.md5
diff local.md5 remote.md5 

3

rsync帯域幅の消費を削減するための機能と、diff柔軟で十分なdiffを提供するための機能を組み合わせたいのです。

このようなもの:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

最初の行ではrsyncなく頻繁に使用している場合は、これを少し調整できると思いますcp-明らかに最後の行では、diff好きなようにフォーマットするフルパワーを持っています。おそらくOPの場合はyで

このアプローチのマイナス面は、ローカルスペースを2倍使用することになりますが、気にする人は1ギガドル未満ですか?


cp --reflink=auto --sparse=always基礎となるFSに応じて、コピーにスペースを使用しない。
トムヘイル

1

行いdiff old_dir new_dir > diff.txt、同じサーバー上の辺の違いによって側のために。

リモートファイルの場合:

たとえば、ABCは既存のサーバー、XYZはリモートサーバー、ディレクトリ名は123です。

ステップ1:ABCサーバー上の既存のディレクトリ123の名前を123_ABCに変更します。

ABC:/Home > mv 123 123_ABC

ステップ2:サーバーABCに新しいディレクトリを作成します。

ABC: > mkdir 123_XYZ

ステップ3:すべてのファイルをXYZサーバーのディレクトリ123からABCサーバーの123_XYZディレクトリにコピーします。

XYZ/123 > scp * userid@ABC: /123_XYZ

これにより、すべてのファイルがXYZサーバー上のディレクトリからABC server / 123_XYZディレクトリにコピーされます。

ステップ4:両方のディレクトリ間で差分をとる:

ABCサーバーに移動し、123_ABCと123_XYZの差分を実行します

ABC > diff 123_ABC 123_XYZ > diff.txt

上記のコマンドは、diffの結果を同じパスのdiff.txtに保存します。

その後、違いを比較できます。

ありがとうございました、

メフル


0

AIDE Advanced Intrusion Detection Environment(AIDE)は、UNIXオペレーティングシステム用のファイル整合性チェッカーです。サポートされているファイルシステム上のデータの整合性に関するレポートを提供する目的。ターゲットホストでAIDEを複数回実行することにより、どのファイルが変更されているかを判断できます。異なるホストでAIDEを複数回実行することにより、どのファイルと許可が異なるかを判断できます。次に、報告された「異なる」ファイルでgui diffツールを使用します。

または、meld、guiffy、kdiff3、diff、vimdiff、gvimdiff、Emacs、Kompare、Diffuse、Easydiff、TkDiff、xxdiffなどのGUI diffツールを使用します。ほとんどは、ファイルの差分に加えてディレクトリの差分を行います。他の人が述べたように、NFS、SMBFS、またはSSHFSを使用してリモートドライブをマウントする必要があります。


0

または、ファイルのリストの出力で2つのファイルを使用できます。次に、これら2つのファイルを比較します。例えば:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

ファイルの1つをダウンロードします。

-rw-r--r-- 1 1015 1015 26624 2005-06-14 13:10 FILE.TXT  

FILE.TXTへ

diff(diff -y remote-files local-files > diff-files)を使用して、それらを並べて比較します。差分ファイルを開いて確認します。>がある各行は、異なるファイルを意味します。

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