Ich versuche, diff
s zwischen allen Dateien mit demselben Namen in zwei Kopien eines Verzeichnisses zu finden (z. B. eine Arbeits- und eine Sicherungskopie). Zum Beispiel kann ich diff
zwei Dateien mit dem gleichen Namen in beiden:
> diff d1/f.cpp d2/f.cpp
oder ich kann Unterschiede zwischen den Verzeichnissen finden:
> diff d1 d2
aber wie kann ich Unterschiede nur zwischen den *.cpp
Dateien finden?
> diff d1/*.cpp d2/*.cpp
scheint nicht zu funktionieren (aus offensichtlichen Gründen).
[Es ist wahrscheinlich leicht mit Schleifen zu lösen, aber ich versuche einen eleganteren Weg zu finden]
echo "${file##*/}";
vor demdiff
Befehl, damit man weiß, welche Dateien tatsächlich verglichen werden. Wie in der Antwort von @ Rinzwind erwähnt, deckt diese Methode auch nicht den Fall ab, in dem die Dateiliste in beiden Verzeichnissen nicht genau gleich ist.diff -qr {DIR1} {DIR2}
erledigt alle Dateien in beiden Verzeichnissen.q
zeigt nur Unterschieder
tut rekursiv. Lass es weg, wenn du das nicht brauchstSie können nicht
diff
direkt angeben , dass Platzhalter verwendet werden sollen, aber Sie können Folgendes hinzufügen:Dateien ausschließen. Wenn Sie also nur
*.cpp
die einfachste Methode möchten , erstellen Sie eine Textdatei, in der alle nicht vorhandenen Dateien aufgelistet sind*.cpp
. Sie können dies mit dem folgenden Befehl ausführen :ls -I "*.cpp" > excluded_files
Dabei-I "*.cpp"
ignoriert das Argument alle CPP-Dateien. Beachten Sie, dass die Anführungszeichen erforderlich sind.quelle
Einige Zeit nachdem ich die Frage gestellt hatte, fand ich das
meld
diff-Dienstprogramm heraus und benutze es seitdem. Dies ist ein großartiges GUI-basiertes Programm, das den Vergleich und das Zusammenführen von Dateien und Verzeichnissen zu einer sehr einfachen Aufgabe macht. Es werden Zwei- oder Dreiwege-Vergleiche durchgeführt.Insbesondere beantwortet es meine ursprüngliche Frage, indem es Ihnen einen farbcodierten Vergleich des Verzeichnisinhalts zeigt und Sie bestimmte Dateien durch einen Doppelklick auf den Dateinamen vergleichen können.
Wenn man mehr als einen Drei-Wege-Vergleich benötigt, dann ist
gvimdiff
(basierend auf demvim
Editor) auch ein großartiger Vergleich, der diese Funktionalität bietet.quelle
Dafür gibt es eine leichte Lösung:
diff dir1 dir2 | vim -R -
in der SchaleEs werden Falzungen und ein direkter Vergleich für geänderte Dateien hinzugefügt.
quelle