Ich habe eine Reihe von Dateien in einem Verzeichnis und möchte überprüfen, ob sie alle eindeutig sind. Der Einfachheit halber sagen wir , ich habe drei Dateien: foo.txt
, bar.txt
und baz.txt
. Wenn ich diese Schleife durchführe, überprüfe ich sie alle gegeneinander:
$ for f in ./*; do for i in ./*; do diff -q "$f" "$i"; done; done
Files bar.txt and baz.txt differ
Files bar.txt and foo.txt differ
Files baz.txt and bar.txt differ
Files baz.txt and foo.txt differ
Files foo.txt and bar.txt differ
Files foo.txt and baz.txt differ
Für die Hunderte von Dateien, mit denen ich mich befassen möchte, würde dies ziemlich unlesbar werden. Es wäre besser, die Dateien aufzulisten, die übereinstimmen, und dann kann ich die Liste schnell durchsehen und sicherstellen, dass die Dateien nur mit sich selbst übereinstimmen. Von der Manpage aus hätte ich gedacht, dass die -s
Option dies erreichen würde:
$ for f in ./*; do for i in ./*; do diff -s "$f" "$i"; done; done
Files bar.txt and bar.txt are identical
Files baz.txt and baz.txt are identical
Files foo.txt and foo.txt are identical
Tatsächlich wird jedoch auch der gesamte Inhalt aller abweichenden Dateien ausgedruckt. Gibt es eine Möglichkeit, dieses Verhalten zu unterdrücken, sodass ich nur das obige Verhalten erhalte?
Alternativ gibt es ein anderes Tool, mit dem dies erreicht werden kann ?
diff -qrs
Das schnellste dafür geschriebene Tool ist fdupes (es ist in den Paket-Repos von Fedora und Ubuntu verfügbar und ...)
Verwendung:
quelle
Wenn Sie identische Dateien in einer Liste finden müssen, sortieren Sie diese zunächst nach Größe, z. B. mit
Führen
md5sum
Sie dann für jede Gruppe von Dateien mit identischer Größe diese aus, um festzustellen, welche Dateien mit welchen identisch sind.Bei großen Dateien könnte es schneller sein, zunächst nur ein kurzes Stück der gesamten Datei zu prüfen:
Führen Sie dann eine vollständige Prüfsumme nur für verdächtige Dateien durch.
quelle