Berechnen Sie die MD5-Prüfsumme eines Verzeichnisses

29

Ich suche nach einer schnellen Möglichkeit, den Inhalt eines Verzeichnisses zu vergleichen. Ist es möglich, eine MD5-Summe (oder eine äquivalente Prüfsumme) eines gesamten Verzeichnisses zu erstellen?

Verwenden von Ubuntu Linux

Kugelfisch
quelle
Vielleicht möchten Sie sich auch mit diff befassen, um Verzeichnisse zu vergleichen, die Ihnen tatsächlich zeigen, wo sich die Verzeichnisse unterscheiden. unixtutorial.org/2008/06/how-to-compare-directories-in-unix
Kibbee
@Kibbee Um dies zu verhindern, müssen Sie etwas anderes berücksichtigen als den Dateninhalt jeder Datei und genau, wie Sie die Dateien prüfen. Gegeben: [Prüfsummen] 1. A (Verzeichnis) - Datei1 [ABC] - Datei2 [CBA] 2. B (Verzeichnis) - Datei1 [ABC] - B1 (Verzeichnis) - Datei2 [CBA] 3. C (Verzeichnis) - Datei4 [ABC] - Datei5 [CBA] 4. D (Directory) - File1 copy [ABC] - File2 copy [CBA] Verzeichnis A und B sind nicht identisch , obwohl sie die gleichen Dateien enthalten (obwohl in B1 , File2 in einem Unterverzeichnis ist) . In Ihrem Beispiel würden A und C als identisch angesehen, weil
Jacob Lyles

Antworten:

36

Sicher - md5sum directory/*

Wenn Sie etwas Flexibleres benötigen (z. B. zur Verzeichnisrekursion oder zum Hash-Vergleich), versuchen Sie es mit md5deep.

apt-get install md5deep
md5deep -r directory

Um eine Verzeichnisstruktur zu vergleichen, können Sie ihr eine Liste von Hashes geben, mit denen verglichen werden soll:

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

Dadurch werden alle Dateien in Verzeichnis2 ausgegeben, die nicht mit Verzeichnis1 übereinstimmen.

Hiermit werden keine Dateien angezeigt, die aus Verzeichnis1 entfernt wurden, oder Dateien, die zu Verzeichnis2 hinzugefügt wurden.

Shane Madden
quelle
Nicht was ich meinte, sondern was ich wollte :) Ich meinte rekursiv und am Ende EINEN Hash, aber ich denke, dies kann mit md5deep -l gemacht werden und die Ausgabe selbst haschen.
Kugelfisch
1
Die Reihenfolge des Hashings ist nicht konsistent, daher müsste die Ausgabe vor dem Hashing sortiert werden
pufferfish
1
Verwenden Sie, um eine deterministische Reihenfolge zu erhalten, -j0die Multithreading deaktiviert (siehe Manpage).
Johann
1
@ ShaneMadden ♦ Ich habe md5deepmit sudo apt-get install md5deepon installiert, Ubuntu 16.04aber als ich versuchte, die Manpage zu lesen, wurde mir mitgeteilt, dass> kein manueller Eintrag für md5deep
Kasun Siyambalapitiya 24.07.17
27

Wenn Sie sehen möchten, was sich (wenn überhaupt) zwischen zwei Verzeichnissen unterscheidet, ist rsync eine gute Lösung.

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

Dies listet alle Dateien auf, die unterschiedlich sind.

JakePaulus
quelle
2
diff -qr /source/directory/ /destination/directory/würde auch Dateien anzeigen, die sich unterscheiden.
Konerak
Gibt es eine Möglichkeit, anstelle von Prüfsummen einen bitweisen Vergleich durchzuführen? Auf lokalen Laufwerken ist es möglicherweise schneller.
Ali
Sehr schön. Funktioniert , wenn Quell- oder Ziel auch Remote - Ordner zBusername@hostname:/destination/directory
Thalis K.
11

Ich glaube, ich habe diese Frage schon einmal mit folgender Antwort beantwortet:

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

gibt: b1a5b654afee985d5daccd42d41e19b2877d66b1

Die Idee ist, dass Sie alle Dateien hashen und die Hashes eine pro Zeile ausschneiden, sie sortieren und hashen, was einen einzelnen Hash ergibt. Dies hängt nicht von den Namen der Dateien ab.

Dan D.
quelle
5

Die cfv- Anwendung ist sehr nützlich, sie kann nicht nur MD5-Prüfsummen prüfen und erstellen, sondern auch CRC32, sha1, torrent, par, par2.

So erstellen Sie eine CRC32-Prüfsummendatei für alle Dateien im aktuellen Verzeichnis:

cfv -C

So erstellen Sie eine MD5-Prüfsummendatei für alle Dateien im aktuellen Verzeichnis:

cfv -C -t md5 -f "aktuelles Verzeichnis.md5sums"

So erstellen Sie eine separate Prüfsummendatei für jedes Unterverzeichnis:

cfv -C -r

So erstellen Sie eine "Super" -Prüfsummendatei, die Dateien in allen Unterverzeichnissen enthält:

cfv -C -rr
Hubert Kario
quelle
4

Ich habe hashdeep verwendet, wie in dieser askubuntu-Antwort erklärt: Überprüfe die Korrektheit der kopierten Dateien :

So berechnen Sie die Prüfsummen:

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

So überprüfen Sie die Unterschiede und listen sie auf:

 $ 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

Dies hat gegenüber md5deep den Vorteil, dass umbenannte (verschobene), hinzugefügte und entfernte Dateien angezeigt werden und das Problem mit Dateien der Länge 0 vermieden wird, das am Ende von http://www.meridiandiscovery.com/how- zu / validieren-kopie-ergebnisse-mit-md5deep .

Argyle
quelle
3

Dies funktionierte für mich: (Führen Sie es aus, während Sie sich in dem Verzeichnis befinden, das Sie interessiert)

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

Sie können MD5-Summen für jede einzelne Datei erstellen, diese Prüfsummen alphabetisch sortieren und sie haben (mit oder ohne Zeilenvorschub). Da MD5 kryptografisch ist, sollte es problemlos mit Hashes von Hashes funktionieren.

Es sollte eine bestimmte Reihenfolge für die Dinge geben, sonst erhalten Sie unterschiedliche Ergebnisse für gleiche Verzeichnisse.

Und Sie sollten bedenken , dass einige Datei zu einem Verzeichnis hinzugefügt wird vollständig das Ergebnis ändern, auch wenn es nur eine war .directoryder .DS_StoreDatei.

Martin Ueding
quelle
Technisch könnte man den gleichen Hash für verschiedene Verzeichnisse bekommen. Wenn Verzeichnis A zwei Dateien mit den Inhalten 'ab' und 'c' hätte und Verzeichnis B zwei Dateien mit den Inhalten 'a' und 'bc' hätte, würde das Hashing nur der Daten in den Dateien zu den gleichen Ergebnissen führen, auch wenn sie Dateien mit enthalten unterschiedliche Inhalte. Ich bin mir nicht mal sicher, wie man die MD5-Summe eines Verzeichnisses definieren würde.
Kibbee
1

Nehmen wir an, Sie möchten in einem bestimmten Fall einige Dateien von Verzeichnis1 nach Verzeichnis2 kopieren und anschließend eine erfolgreiche Kopie mithilfe eines MD5-Vergleichs überprüfen.

Zuerst. cd to directory1 und tippe:

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

Dadurch wird eine Referenzdatei erstellt, die eine MD5-Summe für jede Datei in Verzeichnis1 enthält. Sobald dies erledigt ist, müssen Sie nur noch cd to directory2 und Folgendes eingeben:

md5sum -c ~/Desktop/md5sum.txt

Das Programm md5sum ruft jeden Pfad aus der Datei md5sum.txt ab, berechnet die md5sum dieser Datei im Zielordner und vergleicht sie dann mit der in der Datei gespeicherten Summe.

Nach Abschluss des Vorgangs erhalten Sie eine Zusammenfassung wie "So und so viele Dateien stimmen nicht überein" oder ähnliches.

Joel
quelle
1

Ich musste die Integrität von Sicherungen / Spiegeln überprüfen, die eine große Anzahl von Dateien enthalten, und schrieb schließlich ein Befehlszeilenprogramm namens MassHash. Es ist in Python geschrieben. Ein GTK + Launcher ist ebenfalls verfügbar. Vielleicht möchten Sie es ausprobieren ...

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

Jonathan
quelle