Ich habe zwei Verzeichnisse mit der gleichen Liste von Dateien. Ich muss alle Dateien in beiden Verzeichnissen vergleichen, indem ich die diff
Befehl. Gibt es dafür eine einfache Befehlszeilenoption, oder muss ich ein Shell-Skript schreiben, um die Dateiliste zu erhalten und sie dann durchzugehen?
Antworten
Zu viele Anzeigen?Sie können die diff
Befehl dafür:
diff -bur folder1/ folder2/
Dies gibt einen rekursiven Diff aus, der Leerzeichen ignoriert, mit einem einheitlichen Kontext:
- b Flagge bedeutet, dass Leerzeichen ignoriert werden
- u flag bedeutet einen einheitlichen Kontext (3 Zeilen davor und danach)
- r Flagge bedeutet rekursiv
diff
kann nicht nur zwei Dateien vergleichen, sondern mit Hilfe der -r
werden ganze Verzeichnisbäume durchlaufen, wobei rekursiv Unterschiede zwischen Unterverzeichnissen und Dateien geprüft werden, die an vergleichbaren Stellen in jedem Baum auftreten.
$ man diff
...
-r --recursive
Recursively compare any subdirectories found.
...
Wenn Sie ausdrücklich nicht den Inhalt von Dateien vergleichen wollen, sondern nur prüfen wollen, welche Dateien in den beiden Verzeichnissen nicht vorhanden sind, können Sie Listen von Dateien vergleichen, die mit einem anderen Befehl erstellt wurden.
diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'
-printf '%P\n'
sagt find
um den Ausgabepfaden nicht das Root-Verzeichnis voranzustellen.
Ich habe auch hinzugefügt sort
um sicherzustellen, dass die Reihenfolge der Dateien in beiden Aufrufen von find
.
Les grep
am Ende entfernt die Information über identische Eingabezeilen.
- See previous answers
- Weitere Antworten anzeigen