Ich möchte eine MD5-Prüfsummenliste für alle Dateien in einem Verzeichnis erstellen.
Ich will cat filename | md5sum > ouptput.txt
. Ich möchte dies in einem Schritt für alle Dateien in meinem Verzeichnis tun.
Jede Hilfe wäre toll.
Ich möchte eine MD5-Prüfsummenliste für alle Dateien in einem Verzeichnis erstellen.
Ich will cat filename | md5sum > ouptput.txt
. Ich möchte dies in einem Schritt für alle Dateien in meinem Verzeichnis tun.
Jede Hilfe wäre toll.
Antworten:
Sie können md5sum
mehrere Dateinamen oder Bash-Erweiterungen übergeben:
$ md5sum * > checklist.chk # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK
Wenn Sie Lust auf etwas haben, können Sie beispielsweise find
die Dateien aufreißen und filtern sowie rekursiv arbeiten:
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
um die Dateien in Unterverzeichnissen zu bekommen, wobei das obige md5sum *
Emittieren in die Unterverzeichnisebene geht, indem man sagt ... ist ein Verzeichnis
find -type f -exec md5sum '{}' +
und "find -type f -exec md5sum" {} "angegeben habe. Ich habe es geschafft. Danke :)
openssl md5 * > checklist.txt
**
rekursiv ausgewertet wird (wie zsh), ist dies noch einfacher:md5sum **/* 2>/dev/null
Ein großartiges Programm zum Erstellen / Überprüfen von Prüfsummen ist Rhash. Es werden sogar SFV-kompatible Dateien erstellt und auch überprüft.
Es unterstützt MD4, MD5, SHA1, SHA512, CRC32 und viele andere.
Darüber hinaus kann es rekursives Erstellen (Option -r) wie md5deep oder sha1deep ausführen.
Zu guter Letzt können Sie die Ausgabe der Prüfsummendatei formatieren. zum Beispiel:
rhash --md5 -p '%h,%p\n' -r /home/
Gibt eine CSV-Datei mit dem vollständigen Pfad der Dateien aus, beginnend mit dem /home
Verzeichnis.
Ich finde es äußerst nützlich, auch die Option -e, Dateien umzubenennen, indem crc32 sum in name eingefügt wird.
Sie können "md5sum" mit "rhash" in den PhoenixNL72-Beispielen ändern.
Hier sind zwei ausführlichere Beispiele:
Erstellen Sie eine MD5-Datei in jedem Verzeichnis, das noch keine hat, mit absoluten Pfaden:
find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] && md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done
Erstellen Sie eine MD5-Datei in jedem Ordner, der noch keine hat: keine Pfade, nur Dateinamen:
find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] && md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done
Was sich zwischen 1 und 2 unterscheidet, ist die Art und Weise, wie die Dateien in der resultierenden md5-Datei dargestellt werden.
Die Befehle führen Folgendes aus:
Die Ausgabe dieses gesamten Skripts kann in eine Datei umgeleitet (.....; done> test.log) oder an ein anderes Programm weitergeleitet werden (z. B. grep). Die Ausgabe gibt nur an, welche Verzeichnisse übersprungen und welche verarbeitet wurden.
Nach einer erfolgreichen Ausführung erhalten Sie eine @ md5Sum.md5-Datei in jedem Unterverzeichnis Ihres aktuellen Verzeichnisses
Ich habe die Datei @ md5Sum.md5 genannt, damit sie in einer Samba-Freigabe oben im Verzeichnis aufgeführt wird.
Das Überprüfen aller @ md5Sum.md5-Dateien kann mit den folgenden Befehlen erfolgen:
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt
Anschließend können Sie die Datei checklog.txt mit grep -v OK prüfen, um eine Liste aller Dateien zu erhalten, die sich unterscheiden.
Um eine @ md5Sum.md5 in einem bestimmten Verzeichnis neu zu generieren, löschen Sie zum Beispiel beim Ändern oder Hinzufügen von Dateien die Datei @ md5Sum.md5 oder benennen Sie sie um und führen Sie den Befehl generate erneut aus.
Ich bin auf dieses Problem gestoßen, und obwohl die obigen Lösungen elegant sind, wollte ich einen schnellen und schmutzigen Hack für diese Situation: 1 Verzeichnis mit Unterverzeichnissen, die eine Ebene tiefer liegen.
Geben Sie also das Verzeichnis in eine Shell ein und führen Sie Folgendes aus:
md5sum * */* 2>/dev/null > md5sum.md5
Dadurch werden alle Dateien im obersten Verzeichnis abgerufen, die Fehlerwarnung über die Unterverzeichnisse als Verzeichnisse entfernt und md5sums für den Inhalt des Unterverzeichnisses ausgeführt. Vorteil: leicht zu merken, macht genau das, was es tun soll. Ich bin immer verwirrt von der Suchsyntax und kann mich nicht mehr an sie erinnern. Es ist also nicht erforderlich, eine Schleife usw. durchzuführen, die sich mit Leerzeichen in Verzeichnisnamen befasst. Dieser eine Liner hat einwandfrei funktioniert. Keine robuste, leistungsstarke Lösung, die nicht für Unterverzeichnisse mit mehr als einer Ebene geeignet ist, sondern eine schnelle und einfache Lösung für das Problem.