Rekursiv md5-Dateien im Vergleich zu gespeicherten .md5-Dateien

936
user419541

Was ist der beste Weg für MD53200 Dateien in 167 Verzeichnissen, md5sumwobei alle Hashes mit einer .md5-Datei verglichen werden, die bereits in jedem Verzeichnis erstellt wurde und die zu prüfenden Dateien enthält. Ich müsste auch ein Protokoll erstellen, bei dem die Checksummenprüfung fehlschlägt, damit ich versuchen kann, das Problem zu beheben.

Edit :: Wenn möglich, dies auf eine Weise zu tun, die 8 CPU-Kerne (2x Quad-Core) ausnutzt, wäre eine Bereicherung, da ich 1,1 TB Dateien durchkauen werde.

Die Verzeichnisstruktur ist größtenteils:

Root -> Subdir1 -> File1 File2 File3 hashes.md5 Subdir2 -> File1 File2 File3 hashes.md5 

Obwohl einige Unterverzeichnisse weitere Unterverzeichnisse enthalten können, die Sie wie folgt durchqueren können:

Root -> Subdir1 -> File1 File2 File3 hashes.md5 Subdir2 -> Sub-Subdir1 -> File1 File2 File3 hashes.md5 File1 File2 File3 hashes.md5 

Was ist der beste Weg, um alle Verzeichnisse zu durchsuchen, beginnend mit einem Stammverzeichnis: Suchen Sie nach * .md5-Dateien und prüfen Sie dann den Inhalt des Ordners im Vergleich zu den in der Datei gespeicherten Hashwerten.

Wenn es darauf ankommt, werden die Hashes in diesem Format in den * .md5-Dateien gespeichert:

5a243a798037cbc7b458326a1e8ff263 *File1 1c3a6609e413bb32512e263f821b2dc4 *File2 49615cf8bf8f23680305e964f6d53f85 *File3 6eb73fa3065fbc220ac9569a98b84c79 *File4 d4f103bf06902e4dbeb67b6975ae08b8 *File5 26b5053e374d1d7262c528eca6426a3a *File6 f6ff252801fbeac6274e00b36a2b9725 *File7 22812abfa9a47131ee8e548747c0903b *File8 b19cd459aaaf07a0c69cda7931827338 *File9 

Dateinamen können auch Leerzeichen enthalten, z. B. "* Datei - einige andere Details.ext".

2

2 Antworten auf die Frage

3
tastytea

Sie könnten zum Beispiel find verwenden:

find . -name hashes.md5 -execdir md5sum --quiet --check hashes.md5 \; > logfile 

Dadurch wird nach Dateien mit dem Namen "hashes.md5" gesucht. Wechseln Sie dann in das Verzeichnis der gefundenen Datei und führen Sie md5sum aus. Der Befehl --quiet weist md5sum an, nichts zu drucken, wenn eine Datei in Ordnung ist, nur wenn dies nicht der Fall ist

Edit: Ich weiß nicht, ob 8 CPU-Ausnutzungen ausnutzen werden, wahrscheinlich nicht. Sie können jedoch mehrere Instanzen von find starten, die jeweils mit einer anderen Gruppe von Unterordnern arbeiten.

Kann eine while-Karte für den Hash-Dateinamen hinzugefügt werden? Der Name ist bis auf wenige Verzeichnisse ziemlich normal, aber alle Dateien haben die Erweiterung `.md5`. user419541 vor 8 Jahren 0
ja, mit -name '* .md5' tastytea vor 8 Jahren 0
Für die Suche nach Menschen in der Zukunft: Wenn Sie von Windows nach Linux migrieren, müssen Sie die Zeilenenden Ihrer md5-Dateien in das Unix-Format konvertieren, bevor `md5sum` funktioniert. Sonst erhalten Sie Fehler "Datei oder Verzeichnis nicht gefunden". Sie können dies über `find tun. -name "* .md5" -type f -exec perl -pi -es / \ r \ n / \ n /; ' {} \; `Sei vorsichtig, dass du es nicht in git Repos verwendest, da du sie damit vermeintlich ruinieren kannst. user419541 vor 8 Jahren 0
0
orange_juice6000

Sie können das Programm hashdeep ( https://github.com/jessek/hashdeep ) verwenden, das alle gewünschten Funktionen und mehr unterstützt:

  • zusätzliche Hashes (sha1, sha256, Tiger, Whirlpool)

  • mehr als 1 Hash pro Datei

  • drei Übereinstimmungsmodi (Prüfmodus (alle Hashwerte müssen übereinstimmen, keine neuen oder fehlenden Dateien), positive Übereinstimmung, negative Übereinstimmung)

  • Multithreading