Überprüfen Sie, ob zwei beliebige Dateien in einem Verzeichnis identisch sind.

Überprüfen Sie, ob zwei beliebige Dateien in einem Verzeichnis identisch sind.

Ich arbeite unter OSX und habe mehrere CSV-Dateien in einem Verzeichnis. Ich möchte prüfen, ob zwei davon identisch sind.

Ich habe es versucht:

cmp file1.csv file2.csv || echo "files are different"

Dies sagt mir, dass die ersten beiden Dateien unterschiedlich sind.

Ich habe auch versucht:

 diff -q --from-file *.csv

Das sagt mir, dass dieErsteDatei unterscheidet sich von jeder anderen Datei.

Aber wie kann ich dies für jede Datei überprüfen, ohne es manuell tun zu müssen?

Antwort1

Das Folgende funktioniert bei mir unter Linux. Ich habe kein Mac-Terminal, um zu testen, ob es dort funktioniert.

$ md5sum * | sort | uniq --check-chars=32 --group
36da49e13da596245e85e9e47ab8a04f *y

8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z

Das Programm uniqerfordert sortierte Eingaben. Weitere Ausgabeoptionen finden Sie auf der Manpage.

Antwort2

Zusätzlich zu Stevens Antwort sollten Sie Folgendes in das Terminal eingeben:

shasum * | sort | uniq 

Und das sollte Ihnen die Ergebnisse liefern.

Antwort3

Was Sie wirklich wollen, ist ein schönes Shell-Skript. Ein hirnloses Shell-Skript wäre:

for i in `ls`; do diff -sq --from-file=$i `ls` 2> /dev/null; done | grep identical

Das Problem dabei ist natürlich, dass jede Datei mit jeder anderen Datei verglichen wird, einschließlich sich selbst, selbst wenn die Überprüfung bereits durchgeführt wurde. Ich bin sicher, dass es ein nettes awk-Skript gibt, das das Richtige auf noch weniger Platz erledigt, aber ich fühle mich gerade nicht sehr awk-mäßig.

Andere Optionen zum Diff-Unterscheiden, die Sie möglicherweise in Betracht ziehen möchten, sind -w, wenn Leerzeichen keine Rolle spielen, -b, wenn das Vorhandensein von Leerzeichen wichtig ist, es Ihnen aber egal ist, wie viele und welche Art von Leerzeichen es gibt, und --strip-trailing-cr, wenn einige der Dateien auf einem System erstellt wurden, das glaubt, dass es sowohl eine neue Zeile als auch einen Wagenrücklauf benötigt.

verwandte Informationen