391 Stimmen

Diff-Dateien in zwei verschiedenen Verzeichnissen

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?

551voto

Laurent Etiemble Punkte 26361

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

165voto

Suresh Punkte 1517

Wenn Sie nur an den Dateien interessiert sind, die sich unterscheiden, können Sie diese verwenden:

diff -qr dir_one dir_two | sort

Die Option "q" zeigt nur die Dateien an, die sich unterscheiden, aber nicht den Inhalt, der sich unterscheidet, und "sort" ordnet die Ausgabe alphabetisch an.

26voto

CodeRain Punkte 5874

Diff hat eine Option -r die genau das tun soll.

diff -r dir1 dir2

16voto

miku Punkte 170688

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.

...

5voto

NO_NAME Punkte 2679

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X