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?
@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:
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.
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.
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.
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.
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 ...
Antworten:
Sicher -
md5sum directory/*
Wenn Sie etwas Flexibleres benötigen (z. B. zur Verzeichnisrekursion oder zum Hash-Vergleich), versuchen Sie es mit md5deep.
Um eine Verzeichnisstruktur zu vergleichen, können Sie ihr eine Liste von Hashes geben, mit denen verglichen werden soll:
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.
quelle
-j0
die Multithreading deaktiviert (siehe Manpage).md5deep
mitsudo apt-get install md5deep
on installiert,Ubuntu 16.04
aber als ich versuchte, die Manpage zu lesen, wurde mir mitgeteilt, dass> kein manueller Eintrag für md5deepWenn Sie sehen möchten, was sich (wenn überhaupt) zwischen zwei Verzeichnissen unterscheidet, ist rsync eine gute Lösung.
Dies listet alle Dateien auf, die unterschiedlich sind.
quelle
diff -qr /source/directory/ /destination/directory/
würde auch Dateien anzeigen, die sich unterscheiden.username@hostname:/destination/directory
Ich glaube, ich habe diese Frage schon einmal mit folgender Antwort beantwortet:
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.
quelle
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:
So erstellen Sie eine MD5-Prüfsummendatei für alle Dateien im aktuellen Verzeichnis:
So erstellen Sie eine separate Prüfsummendatei für jedes Unterverzeichnis:
So erstellen Sie eine "Super" -Prüfsummendatei, die Dateien in allen Unterverzeichnissen enthält:
quelle
Ich habe hashdeep verwendet, wie in dieser askubuntu-Antwort erklärt: Überprüfe die Korrektheit der kopierten Dateien :
So berechnen Sie die Prüfsummen:
So überprüfen Sie die Unterschiede und listen sie auf:
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 .
quelle
Dies funktionierte für mich: (Führen Sie es aus, während Sie sich in dem Verzeichnis befinden, das Sie interessiert)
quelle
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
.directory
der.DS_Store
Datei.quelle
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:
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:
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.
quelle
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/
quelle