Ein guter Weg, um diesen Vergleich durchzuführen, ist die Verwendung find
von md5sum
, dann a diff
.
Beispiel
Verwenden Sie find, um alle Dateien im Verzeichnis aufzulisten. Berechnen Sie dann den MD5-Hash für jede Datei und leiten Sie ihn sortiert nach Dateinamen in eine Datei um:
find /dir1/ -type f -exec md5sum {} + | sort -k 2 > dir1.txt
Gehen Sie in einem anderen Verzeichnis genauso vor:
find /dir2/ -type f -exec md5sum {} + | sort -k 2 > dir2.txt
Dann vergleiche das Ergebnis zweier Dateien mit diff
:
diff -u dir1.txt dir2.txt
Oder als einzelner Befehl mit Prozessersetzung:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2) <(find /dir2/ -type f -exec md5sum {} + | sort -k 2)
Wenn Sie nur die Änderungen sehen möchten:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ") <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ")
Der Befehl cut gibt nur den Hash (erstes Feld) aus, der mit diff verglichen werden soll. Andernfalls gibt diff jede Zeile aus, da sich die Verzeichnispfade auch bei gleichem Hash unterscheiden.
Aber Sie werden nicht wissen, welche Datei geändert wurde ...
Dafür kann man sowas probieren
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /') <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /')
Diese Strategie ist sehr nützlich, wenn sich die beiden zu vergleichenden Verzeichnisse nicht auf demselben Computer befinden und Sie sicherstellen müssen, dass die Dateien in beiden Verzeichnissen gleich sind.
Eine andere gute Möglichkeit, den Job zu erledigen, ist die Verwendung des diff
Befehls von Git (kann Probleme verursachen, wenn Dateien unterschiedliche Berechtigungen haben -> dann wird jede Datei in der Ausgabe aufgelistet):
git diff --no-index dir1/ dir2/
bash --version
?