Frage Berechne die MD5-Prüfsumme eines Verzeichnisses


Ich suche nach einer schnellen Möglichkeit, Verzeichnisinhalte zu vergleichen. Ist es möglich, eine md5sum (oder eine äquivalente Prüfsumme) für ein ganzes Verzeichnis zu erstellen?

Ubuntu Linux verwenden


28
2017-08-20 16:54


Ursprung


Sie können auch in diff suchen, um Verzeichnisse zu vergleichen, die Ihnen 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 als den Dateninhalt jeder Datei und genau die Prüfsumme der Dateien berücksichtigen. 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 (Verzeichnis) - Datei1 kopieren [ABC] - Datei2 kopieren [CBA] Verzeichnis EIN und B sind nicht identisch, obwohl sie die gleichen Dateien enthalten (obwohl in B1, Datei2 ist in einem Unterverzeichnis). Unter deinem Beispiel EIN und C würde als identisch angesehen werden, weil - Jacob Lyles


Antworten:


Sicher - md5sum directory/*

Wenn Sie etwas flexibleres benötigen (z. B. für Verzeichnisrekursion oder Hash-Vergleich), versuchen Sie 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.

Dies zeigt keine Dateien an, die aus Verzeichnis1 oder Dateien, die zu Verzeichnis2 hinzugefügt wurden, entfernt wurden.


36
2017-08-20 17:01



Nicht, was ich meinte, aber was ich wollte :) Ich meinte rekursiv und am Ende EINEN Hash, aber ich denke, das kann mit md5deep -l gemacht werden und die Ausgabe selbst hashing. - pufferfish
Die Reihenfolge des Hashing ist nicht konsistent, daher müsste die Ausgabe vor dem Hashing sortiert werden - pufferfish
Um eine deterministische Reihenfolge zu erhalten, verwenden Sie -j0 was Multithreading deaktiviert (siehe die man-Seite). - Johann
@ShaneMadden ich installiert md5deep mit sudo apt-get install md5deep auf Ubuntu 16.04 aber als ich versucht habe, die man-seite zu lesen, sagt es mir, dass> kein manueller eintrag für md5deep - Kasun Siyambalapitiya


Wenn Sie sehen möchten, was zwischen zwei Verzeichnissen (wenn überhaupt) anders ist, wäre rsync eine gute Wahl.

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

Dadurch werden alle Dateien aufgelistet, die sich unterscheiden.


26
2017-08-20 17:21



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? Es könnte schneller auf lokalen Laufwerken sein. - Ali
Sehr schön. Funktioniert, wenn Quelle oder Ziel auch Remote-Ordner sind, z. username@hostname:/destination/directory - Thalis K.


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

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

gibt: b1a5b654afee985d5daccd42d41e19b2877d66b1

Die Idee ist, dass Sie alle Hash-Hash-Dateien pro Zeile aussortieren, sortieren und hacken, um einen einzelnen Hash zu erhalten. Das hängt nicht von den Namen der Dateien ab.


10
2017-08-21 13:22





Das cfv Anwendung ist sehr nützlich, nicht nur kann es MD5-Prüfsummen überprüfen und erstellen, es kann auch CRC32, sha1, torrent, par, par2 tun.

Erstellen einer CRC32-Prüfsummendatei für alle Dateien im aktuellen Verzeichnis:

cfv -C

Erstellen einer 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 -Cr

So erstellen Sie eine "Super" -Checksum-Datei, die Dateien in allen Unterverzeichnissen enthält:

cfv -Crr

5
2017-08-20 21:37





Das funktionierte für mich: (führe es in dem Verzeichnis, das dich interessiert)

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

3
2017-12-16 01:53





Ich benutzte hashdeep, wie in dieser Askubuntu-Antwort erklärt: Überprüfen Sie die Richtigkeit der kopierten Dateien:

Um die Prüfsummen zu berechnen:

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

Um die Unterschiede zu überprüfen und aufzulisten:

 $ 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 einen Vorteil gegenüber md5deep, da es umbenannte (verschobene), hinzugefügte und entfernte Dateien anzeigt, sowie das Problem mit Dateien mit der Länge 0, auf die unten hingewiesen wird, vermeidet http://www.meridiandiscovery.com/how-to/validating-copy-results- using-md5deep.


3
2018-01-31 19:19





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

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

Und Sie sollten berücksichtigen, dass das Hinzufügen einer Datei zu einem Verzeichnis das Ergebnis vollständig ändert, auch wenn es nur ein .directory von .DS_Store Datei.


1
2017-08-20 21:20



Technisch könnte man für verschiedene Verzeichnisse den gleichen Hash erhalten. Wenn Verzeichnis A 2 Dateien mit Inhalt 'ab' und 'c' und Verzeichnis B 2 Dateien mit Inhalt 'a' und 'bc' hätte, würden nur die Daten in den Dateien dieselben Ergebnisse liefern, obwohl sie Dateien mit haben verschiedene Inhalte. Ich bin mir nicht einmal sicher, wie man die MD5Sum eines Verzeichnisses definieren würde. - Kibbee


Nehmen wir an, Sie möchten im konkreten Fall einige Dateien von Verzeichnis1 in Verzeichnis2 kopieren und dann eine erfolgreiche Kopie mit einem MD5-Vergleich überprüfen.

Zuerst. Wechseln Sie in das Verzeichnis1, und geben Sie Folgendes ein:

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

Das erstellt eine Referenzdatei mit einer MD5-Summe für jede Datei in Verzeichnis1. Sobald dies erledigt ist, müssen Sie nur zu Verzeichnis2 wechseln 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 Summe, die sie in der Datei gespeichert hat.

Nachdem der Vorgang abgeschlossen ist, erhalten Sie eine Zusammenfassung wie "So und so viele Dateien stimmen nicht überein" oder so ähnlich.


1
2018-02-12 12:02



Referenz: ubuntugenius.wordpress.com/2009/11/17/ ... - Joel


Ich hatte die Notwendigkeit, die Integrität von Backups / Mirrors zu ü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 überprüfen ...

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


1
2017-07-28 23:39