
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 uniq
erfordert 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.