ディレクトリのMD5チェックサムを計算する


29

ディレクトリの内容を比較する簡単な方法を探しています。ディレクトリ全体のmd5sum(または同等のチェックサム)を実行できますか?

Ubuntu Linuxを使用する


また、diffを使用してディレクトリを比較し、ディレクトリの違いを実際に示すこともできます。 unixtutorial.org/2008/06/how-to-compare-directories-in-unix
Kibbee

@Kibbeeそれを防ぐために、各ファイルのデータ内容とファイルのチェックサムの正確な方法以外のことを考慮する必要があります。指定:[チェックサム] 1. A(ディレクトリ) -File1 [ABC]-File2 [CBA] 2. B(ディレクトリ) -File1 [ABC] -B1(ディレクトリ) -File2 [CBA] 3. C(ディレクトリ) -File4 [ABC]-File5 [CBA] 4. D(ディレクトリ) -File1 コピー[ABC]-File2コピー[CBA]ディレクトリABは同じファイルを含んでいますが同一ではありません(B1では、File2はサブディレクトリにあります) 。あなたの例では、ACは同一と見なされます。
ジェイコブライルズ

回答:


36

確かに- md5sum directory/*

少し柔軟なものが必要な場合(ディレクトリの再帰やハッシュの比較など)、md5deepを試してください。

apt-get install md5deep
md5deep -r directory

ディレクトリ構造を比較するには、比較するハッシュのリストを指定できます。

md5deep -r -s /directory1 > dir1hashes
md5deep -r -X dir1hashes /directory2

これにより、directory1に一致しないdirectory2内のすべてのファイルが出力されます。

これにより、directory1から削除されたファイルや、directory2に追加されたファイルは表示されません。


私が意図したことではなく、私が望んだこと:)私は再帰的に意味し、最後に1つのハッシュを取得しましたが、これはmd5deep -lと出力自体のハッシュで行うことができると思います。
フグ

1
ハッシュの順序はとてもハッシュ前に出力をソートしなければならない、一貫性がありません
フグ

1
決定的な順序を取得するには、-j0whichを使用してマルチスレッドを無効にします(manページを参照)。
ヨハン14年

1
ShaneMadden♦私がインストールさ@ md5deepsudo apt-get install md5deepUbuntu 16.04私はmanページを読みしようとしたとき、それはmd5deepなし手動入力>と言われます
Kasun Siyambalapitiya

27

2つのディレクトリの違い(もしあれば)を確認するには、rsyncが適しています。

rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory

これにより、異なるファイルがリストされます。


2
diff -qr /source/directory/ /destination/directory/異なるファイルも表示されます。
コネラック

チェックサムの代わりにビットごとの比較を実行する方法はありますか?ローカルドライブではより高速になる場合があります。
アリ

非常に素晴らしい。ワークス元または宛先が遠隔でもある場合は、フォルダなどusername@hostname:/destination/directory
Thalis K.

11

私はこの答えで以前にこれに答えたと思います:

find . -xtype f -print0 | xargs -0 sha1sum | cut -b-40 | sort | sha1sum

与える: b1a5b654afee985d5daccd42d41e19b2877d66b1

アイデアは、すべてのファイルをハッシュして、1行に1つずつハッシュを切り取り、それらをソートして、1つのハッシュを生成するハッシュにすることです。これはファイルの名前に依存しません。


5

CFVのアプリケーションは、MD5チェックサムをチェックして、作成することができるだけでなく、それはまた、CRC32、SHA1、急流、パー、PAR2を行うことができ、非常に便利です。

現在のディレクトリ内のすべてのファイルに対してCRC32チェックサムファイルを作成するには:

cfv -C

現在のディレクトリ内のすべてのファイルに対してMD5チェックサムファイルを作成するには:

cfv -C -t md5 -f "現在のディレクトリ.md5sums"

サブディレクトリごとに個別のチェックサムファイルを作成するには:

cfv -C -r

すべてのサブディレクトリ内のファイルを含む「スーパー」チェックサムファイルを作成するには:

cfv -C -rr

4

このaskubuntuの回答で説明されているように、私はhashdeepを使用しました :コピーされたファイルの正確さを確認します

チェックサムを計算するには:

 $ cd <directory1>
 $ hashdeep -rlc md5 . > ~/hashOutput.txt

違いを確認してリストするには:

 $ cd <directory2>
 $ hashdeep -ravvl -k ~/hashOutput.txt .
 hashdeep: Audit passed
    Input files examined: 0
   Known files expecting: 0
           Files matched: 13770
 Files partially matched: 0
             Files moved: 0
         New files found: 0
   Known files not found: 0

これには、名前の変更(移動)、追加、削除されたファイルが表示されるという点でmd5deepよりも利点があります。 to / validating-copy-results-using-md5deep


3

これは私のために働いた:(あなたが興味のあるディレクトリで実行する)

md5deep -rl . | awk '{print $1}' | sort -n | md5sum

1

すべての単一ファイルのMD5合計を作成し、これらのチェックサムをアルファベット順に並べて、それらを(改行の有無にかかわらず)配置できます。MD5は暗号化されているため、ハッシュのハッシュでも問題なく機能するはずです。

物事には一定の順序があるはずです。そうでないと、等しいdirsに対して異なる結果が得られます。

また、1つのディレクトリにファイルを追加すると、それが単なるファイルであっても、結果が完全に変わることを考慮する必要が.directoryあり.DS_Storeます。


技術的には、異なるディレクトリに対して同じハッシュを取得できます。dir Aにコンテンツ 'ab'および 'c'の2つのファイルがあり、dir Bにコンテンツ 'a'および 'bc'の2つのファイルがある場合、ファイル内のデータがあるにもかかわらず、ファイル内のデータのみをハッシュすると同じ結果が得られます異なる内容。ディレクトリのMD5Sumをどのように定義するかさえわかりません。
キブビー

1

特定のケースとして、directory1からdirectory2にいくつかのファイルをコピーし、md5比較を使用してコピーが成功したことを確認したいとしましょう。

最初。directory1にcdして、次を入力します。

find -type f -exec md5sum "{}" \; > ~/Desktop/md5sum.txt

これにより、directory1の各ファイルのmd5合計を含む参照ファイルが作成されます。これが完了したら、ディレクトリ2にcdして、次のように入力するだけです。

md5sum -c ~/Desktop/md5sum.txt

プログラムmd5sumは、md5sum.txtファイルから各パスを取得し、宛先フォルダー内のそのファイルのmd5sumを計算し、それをファイルに保存されている合計と比較します。

プロセスが完了すると、「そのため非常に多くのファイルが一致しませんでした」などの概要が表示されます。



1

大量のファイルを含むバックアップ/ミラーの整合性を検証する必要があり、最終的にMassHashと呼ばれるコマンドラインプログラムを作成しました。Pythonで書かれています。GTK +ランチャーも利用できます。あなたはそれをチェックアウトしたいかもしれません...

http://code.google.com/p/masshash/

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