989 Stimmen

Wie kann ich bei zwei Verzeichnisbäumen herausfinden, welche Dateien sich durch ihren Inhalt unterscheiden?

Wenn ich die Unterschiede zwischen zwei Verzeichnisbäumen herausfinden will, führe ich normalerweise einfach aus:

diff -r dir1/ dir2/

Dies gibt genau die Unterschiede zwischen den entsprechenden Dateien aus. Ich bin nur daran interessiert, eine Liste der entsprechenden Dateien zu erhalten, deren Inhalt sich unterscheidet. Ich nahm an, dass dies einfach durch die Übergabe einer Kommandozeilenoption an diff aber ich konnte auf der Manpage nichts finden.

Irgendwelche Vorschläge?

6 Stimmen

1 Stimmen

Wie kann man in Bezug auf eines der Verzeichnisse nur die Dateien/Verzeichnisse erhalten, die in dem anderen extra sind?

0 Stimmen

Verwenden. dircmp Befehl unter Unix (nicht Linux)

1422voto

Mark Loeser Punkte 16777

Versuchen Sie es:

diff --brief --recursive dir1/ dir2/

Oder alternativ, mit den kurzen Flaggen -qr :

diff -qr dir1/ dir2/

Wenn Sie auch Unterschiede für Dateien sehen möchten, die in keinem der beiden Verzeichnisse vorhanden sind:

diff --brief --recursive --new-file dir1/ dir2/  # with long options
diff -qrN dir1/ dir2/                            # with short flag aliases

316voto

FPC Punkte 3334

Der von mir verwendete Befehl lautet:

diff -qr dir1/ dir2/

Es ist genau dasselbe wie das von Mark :) Aber seine Antwort hat mich gestört, weil sie eine andere Typen von Flaggen, und das hat mich zweimal hinschauen lassen. Mit Marks ausführlichen Flags wäre es das:

diff  --brief --recursive dir1/ dir2/

Ich entschuldige mich dafür, dass ich einen Beitrag geschrieben habe, obwohl die andere Antwort durchaus akzeptabel ist. Ich konnte mich nicht zurückhalten... Ich arbeite daran, weniger pedantisch zu sein.

156voto

Alan Porter Punkte 2109

Ich verwende gerne git diff --no-index dir1/ dir2/ weil es die Unterschiede in Farbe anzeigen kann (wenn Sie diese Option in Ihrer Git-Konfiguration eingestellt haben) und weil es alle Unterschiede in einer langen Seitenausgabe mit "less" anzeigt.

59voto

CodeBug Punkte 511

Verwendung von rsync :

rsync --dry-run --recursive --delete --links --checksum --verbose /dir1/ /dir2/ > dirdiff_2.txt

Alternativ können Sie auch diff :

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

Sie sind funktional gleichwertig, aber die Leistung kann je nach dem variieren:

  • Wenn sich die Verzeichnisse auf demselben Laufwerk befinden, ist rsync schneller.
  • Wenn sich die Verzeichnisse auf zwei verschiedenen Laufwerken befinden, ist diff schneller.

Der Grund dafür ist, dass diff beide Verzeichnisse fast gleich stark belastet, wodurch die Belastung der beiden Laufwerke maximiert wird. rsync berechnet die Prüfsummen in großen Paketen, bevor sie tatsächlich verglichen werden. Das gruppiert die E/A-Operationen in großen Paketen und führt zu einer effizienteren Verarbeitung, wenn alles auf einem einzigen Laufwerk stattfindet.

42voto

Alexander Punkte 8919

Melden ist auch ein hervorragendes Hilfsmittel für den Vergleich zweier Verzeichnisse:

meld dir1/ dir2/

Meld bietet zahlreiche Optionen für den Vergleich von Dateien und Verzeichnissen. Wenn sich zwei Dateien unterscheiden, ist es einfach, den Dateivergleichsmodus aufzurufen und die genauen Unterschiede zu sehen.

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