web-dev-qa-db-ja.com

Linuxで、2つの別々のディレクトリの内容がまったく同じであることを簡単に確認するにはどうすればよいですか?

CentOS 5.x

Mqの質問は これ に似ているように見えましたが、よくわかりませんでした...

2つのサーバー(互いに完全に分離されている)があり、それぞれにディレクトリとサブディレクトリがあり、まったく同じ内容である必要があります。

たとえば、ディレクトリレイアウトは次のようになります。

サーバーA-

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt

サーバーB-

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt

理想的には、再帰的なチェックを行い、すべてが一致することを確認する方法が必要です。

また、サードパーティのツールの使用は避けたいと思います。

何か案は?

8
Mike B

1つの良い方法は、ツリー内のすべてのファイルでmd5sumsを使用することです。

Server1でこれを実行します:

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server1.tx

Server2でこれを実行します

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server2.tx

次に、2つのファイル(diffを使用)または好きなものを比較します。

それはあなたが探しているものの線に沿っていますか?

もちろん、必要に応じて、SSHを使用してコマンドをリモートで実行することもできます。

9
Camden S.

whatの変更を必ずしも気にしない場合は、何かが変更されただけで、rsyncはそれでも本当に良いです。このコマンドを実行してみて、これが「servera」から実行されていると仮定して、出力をざっと見てください。

rsync -avcn /opt/foo/ serverb:/opt/foo

結果のリストは、実際に同期プロセスを実行した場合に変更されたファイルになります。タイムスタンプのみが変更されてもファイルはリストに表示されますが、内容は同じままであることに注意してください。 -nフラグを追加したため、実際にはアクションは実行されず、報告されるだけです。

7
Scott Pack

ディレクトリ内の個々のファイルの個々のMD5ハッシュを計算する簡単なスクリプトを一緒にハックすることもできますが、それを行うためのより良い方法は、md5deepと呼ばれるツールを使用することです。ディレクトリを作成し、ファイルに出力します。次に、最初のハッシュファイルを入力として受け取り、2つのディレクトリ間で異なるファイルのリストを提供して、別のディレクトリで使用できます。

したがって、例をとると、次のプロセスに従います。

  1. サーバーAの必要なディレクトリのハッシュを計算します。

    md5deep -r /opt/foo/ > file_hashes.txt

  2. 比較のために、ファイルfile_hashes.txtファイルをサーバーBにコピーします。

  3. サーバーBの必要なディレクトリのハッシュを計算しますが、-xフラグを使用してサーバーAからのファイルハッシュを入力ファイルとして取得し、異なるファイルのみを表示します。

    md5deep -x file_hashes.txt -r /opt/foo/

Md5deepツールセットは、ほとんどのディストリビューションのパッケージ管理システムの一部を形成します。すばらしいのは、MD5だけでなく、さまざまなハッシュアルゴリズムをサポートしていることです。したがって、衝突について偏執的である場合は、いくつかの選択肢があります。次のツールはmd5deepの一部を形成し、それぞれが代替のハッシュアルゴリズムを提供します。

   md5deep - Compute and compare MD5 message digests
   sha1deep - Compute and compare SHA-1 message digests
   sha256deep - Compute and compare SHA-256 message digests
   tigerdeep - Compute and compare Tiger message digests
   whirlpooldeep - Compute and compare Whirlpool message digests
5
Richard Keller

@ scott-packに似た手法を使用しました。これにより、双方向の差分が得られます。 「削除」で始まるものはすべて、リモートサーバー上にあるが、ローカルサーバー上にはないファイルです。ファイルの内容なしでリストされているすべてのディレクトリは、変更のないディレクトリです。リストされているすべてのファイルは、リモートサーバーに存在しないか、ローカルバージョンが「新しい」ファイルです。

rsync -rvnac --delete /local/directory/ user@remote:/remote/directory/
0
David Baucum