Ich habe zwei Verzeichnisse mit der gleichen Liste von Dateien. Ich muss alle Dateien, die in beiden Verzeichnissen vorhanden sind, mit dem diff
Befehl vergleichen. Gibt es eine einfache Befehlszeilenoption, oder muss ich ein Shell-Skript schreiben, um die Dateiliste abzurufen und sie dann zu durchlaufen?
303
diff
Befehl zugreifen, indem Sie die GNU-Dienstprogramme für Win32 herunterladen .-b
ignoriert Sie Leerzeichenänderungen und-u
gibt 3 Pufferzeilen an.diff -rub folder1/ folder2/
-bur
dass Sie sich leicht daran erinnern können, wenn Sie in einem kalten Klima leben.Wenn Sie nur die Dateien sehen möchten, die sich unterscheiden, können Sie Folgendes verwenden:
Die Option "q" zeigt nur die Dateien an, die sich unterscheiden, nicht jedoch den Inhalt, der sich unterscheidet, und "sortieren" ordnet die Ausgabe alphabetisch an.
quelle
diff
auf jedes Paar von unterschiedlichen Dateien. Der Ansatz eines Menschen wäre völlig anders, wenn sich nur eine oder zwei Dateien unterscheiden würden, wenn sich Dutzende von Dateien unterscheiden würden. Ich könnte mich in der Ausgabe vondiff
Dutzenden von Dateien gleichzeitig verlieren !-x PATTERN
in den Befehl einschließen , um bestimmte Unterverzeichnisse auszuschließen. Zum Beispieldiff -qr repo1 repo2 -x ".git"
werden zwei Verzeichnisse (Repo1 und repo2) vergleichen , sondern werden die Dateien in .git Ordner der entsprechenden Verzeichnisse ausschließen.Diff hat eine Option
-r
, die genau das tun soll.diff -r dir1 dir2
quelle
diff
Sie können nicht nur zwei Dateien vergleichen, sondern mithilfe der-r
Option ganze Verzeichnisbäume durchsuchen und rekursiv die Unterschiede zwischen Unterverzeichnissen und Dateien überprüfen, die an vergleichbaren Stellen in jedem Baum auftreten.quelle
Wenn es sich um GNU diff handelt, sollten Sie es nur auf die beiden Verzeichnisse verweisen und die Option -r verwenden können.
Andernfalls versuchen Sie es mit
NB Wie Dennis im Kommentarbereich hervorhob, müssen Sie die Befehlsersetzung auf dem ls nicht durchführen. Ich mache das schon so lange, dass ich das so ziemlich mit dem Autopiloten mache und den Befehl ersetze, den ich brauche, um meine Liste der Dateien zum Vergleich zu erhalten.
Außerdem habe ich vergessen hinzuzufügen, dass ich '\ ls' mache, um meinen Alias von ls zu GNU ls vorübergehend zu deaktivieren, so dass ich die Farbformatierungsinformationen aus der von GNU ls zurückgegebenen Liste verliere.
quelle
ls
for i in ./dir1/*
Hier ist ein Skript, um Unterschiede zwischen Dateien in zwei Ordnern anzuzeigen. Es funktioniert rekursiv. Ändern Sie dir1 und dir2.
quelle
Wenn Sie den Inhalt von Dateien nicht vergleichen möchten und nur prüfen möchten, welche nicht in beiden Verzeichnissen vorhanden sind, können Sie Listen von Dateien vergleichen, die von einem anderen Befehl generiert wurden.
-printf '%P\n'
weistfind
an, den Ausgabepfaden nicht das Stammverzeichnis voranzustellen.Ich habe auch hinzugefügt
sort
, um sicherzustellen, dass die Reihenfolge der Dateien bei beiden Aufrufen von gleich istfind
.Das
grep
am Ende entfernt Informationen über identische Eingabezeilen.quelle
Versuche dies:
quelle