Um einen zuverlässigen Überblick zu erhalten, benötigen Sie einheitliche und sortierbare Listen der Dateien in beiden Verzeichnissen und eine Möglichkeit, diese beiden Listen zu vergleichen.
Wie bereits erwähnt, diff
sollen lesbare, semantisch sinnvolle Übersichten über Unterschiede zwischen Dateien erstellt werden. Dies macht es sehr geeignet für den Vergleich von Klartext oder Code, aber weniger für den Vergleich von Listen.
Verwenden Sie stattdessen die comm
Suche nach Gemeinsamkeiten oder Unterschieden zwischen zwei Listen.
Um eine "saubere" Liste zu erstellen, die nur die Informationen enthält, die Sie benötigen, verwenden Sie die -printf
von GNU bereitgestellte Option find
. Es ist effizienter und robuster, als ls
für jede Datei einen Prozess zu starten, und es kann nützliche Informationen direkt ausgeben, wie:
%Tk File's last modification time in the format specified by k
%s File's size in bytes
%p File's name
Alles zusammenstellen:
- Listen Sie die Dateien in jedem Verzeichnis auf (in einem Format, das nur die erforderlichen Informationen enthält) →
find … -printf …
- Sortieren Sie die Listen →
sort
- Finden Sie alle Zeilen, die zwischen den Listen nicht identisch sind →
comm -3
: "Spalte 3 unterdrücken (Zeilen, die in beiden Dateien erscheinen)"
cd dir1 && find . -printf '%T+ %s %p\n' | sort > ../dir1.txt && cd .. cd dir2 && find . -printf '%T+ %s %p\n' | sort > ../dir2.txt && cd .. comm -3 dir1.txt dir2.txt > differences.txt
Eine Einschränkung %T+
: Das Datumsformat enthält Sekundenbruchteile (2018-11-25 + 14: 58: 43.1197033990). Wenn Ihre beiden Verzeichnisse in unterschiedlichen Dateisystemen mit unterschiedlichen Datumsgenauigkeiten gespeichert sind, müssen Sie möglicherweise ein anderes (manuelles) Datumsformat verwenden, um die Sekundenbruchteile auszuschließen.