UPDATE: Es ist ein paar Jahre her, seit ich diese Antwort gepostet habe, und in der Zwischenzeit habe ich das Skript, das ich hier mehrmals vorgestellt habe, umgeschrieben und verbessert. Ich habe beschlossen, das neue Skript als brandneue Antwort neu zu veröffentlichen. Ich kann es nur wärmstens empfehlen.
EINFÜHRUNG
Ich habe beobachtet, dass die Reihenfolge, in der der Befehl find die gefundenen Elemente in einem Verzeichnis ausgibt, innerhalb identischer Verzeichnisse auf verschiedenen Partitionen variiert. Wenn Sie die Hashes desselben Verzeichnisses vergleichen, müssen Sie sich darüber keine Gedanken machen. Wenn Sie jedoch die Hashes abrufen, um sicherzustellen, dass beim Kopieren keine Dateien übersehen oder beschädigt wurden, müssen Sie eine zusätzliche Zeile für hinzufügen Sortieren des Inhalts des Verzeichnisses und seiner Elemente. Die Antwort von Matthew Bohnsack ist zum Beispiel recht elegant:
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum
Wenn Sie es jedoch verwenden, um ein kopiertes Verzeichnis mit dem Original zu vergleichen, senden Sie die Ausgabe an eine txt-Datei, die Sie mit Kompare oder WinMerge mit der ausgegebenen Liste aus dem anderen Verzeichnis vergleichen oder indem Sie einfach die Hashes der einzelnen lis abrufen . Die Sache ist, da die Reihenfolge, in der das Find-Tool den Inhalt ausgibt, von einem Verzeichnis zum anderen variieren kann, signalisiert Kompare viele Unterschiede, da die Hashes nicht in derselben Reihenfolge berechnet wurden. Keine große Sache für kleine Verzeichnisse, aber ziemlich ärgerlich, wenn Sie mit 30000 Dateien arbeiten. Daher müssen Sie die Ausgabe in zusätzlichen Schritten sortieren, um den Vergleich der Hash-Listen zwischen den beiden Verzeichnissen zu vereinfachen.
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum > sha1sum_list_unsorted.txt
sort sha1sum_list_unsorted.txt > sha1sum_list_sorted.txt
Dies würde die Ausgabe so sortieren, dass sich Dateien mit demselben Hash in denselben Zeilen befinden, wenn das differenzierende Programm ausgeführt wird (vorausgesetzt, das neue Verzeichnis fehlt nicht).
UND AUF DAS SCRIPT ...
Hier ist ein Skript, das ich geschrieben habe. Es macht das Gleiche wie die Antwort find / xarg, sortiert jedoch die Dateien, bevor die sha1sum abgerufen wird (und speichert sie im selben Verzeichnis). Die erste Zeile des Skripts findet alle Dateien im Verzeichnis rekursiv. Der nächste sortiert die Ergebnisse alphabetisch. In den beiden folgenden Schritten wird der sortierte Inhalt verwendet, und den Dateien in der sortierten Liste werden eine sha1sum und Anführungszeichen angehängt. Dabei wird ein großes Shell-Skript erstellt, das jeden Datei-Hash nacheinander berechnet und an content_sha1sum.txt ausgibt.
#!/bin/bash
find . -type f > content.txt
sort content.txt > content_sorted.txt
awk '{print "sha1sum \""$0}' content_sorted.txt > temp.txt
awk '{print $0"\""}' temp.txt > get_sha1.sh
chmod +x get_sha1.sh
./get_sha1.sh > content_sha1sum.txt
rm content.txt
rm content_sorted.txt
rm temp.txt
rm get_sha1.sh
xdg-open content_sha1sum.txt
Hoffe das hilft.