
Wie kann man einfach überprüfen, ob zwei verschiedene Verzeichnisse genau denselben Inhalt haben?
Antwort1
Dieses Ziel kann durch eine Kombination aus find
, , und einer Reihe von Pipes erreicht werden:sha1sum
find /path/to/files -type f -print0 | sort -z | xargs -0 sha1sum | cut -c1-40 | sha1sum
Sie erhalten eine Ausgabe wie:
98f3a7c54a8f51dd86506a26d4d3bd90e6e4b821 -
Notiz:Der abschließende Bindestrich kann natürlich ignoriert werden.
Führen Sie dies für die Pfade aus, die Sie überprüfen möchten, und Sie werden sehen, ob zwei Verzeichnisse gleich sind oder nicht. Wenn dies nicht der Fall ist, können Sie mit der Bearbeitung des Befehls beginnen, um die unterschiedlichen Dateien zu finden. Eine einfache, wenn auch zeitaufwändige Möglichkeit hierfür wäre, das zu entfernen | cut -c1-40 | sha1sum
, wodurch jede Datei und ihr entsprechender SHA1-Hash aufgelistet werden.
Wie funktioniert das?
Erläuterung | |
---|---|
find /path/to/files |
gibt eine Liste der Elemente aus dem /path/to/files Verzeichnis zurück |
-type f |
nur Dateien einschließen |
-print0 |
druckt den vollständigen Dateinamen auf der Standardausgabe, gefolgt von einem Nullzeichen |
| |
und dann |
sort -z |
Sortieren Sie die Liste, indem Sie als Zeilentrennzeichen null anstelle eines Zeilenumbruchs verwenden. |
| |
und dann |
xargs -0 sha1sum |
führe jeden Wert aus der Liste durchsha1sum |
| |
und dann |
cut -c1-40 |
nehmenNurdie ersten 40 Zeichen (die Länge eines sha1 |
| |
und dann |
sha1sum |
Erzeugen Sie einen SHA1-Hash der Liste der SHA1s. |