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?Wenn es GNU diff ist, dann sollten Sie einfach auf die beiden Verzeichnisse zeigen und die Option -r verwenden können.
Andernfalls versuchen Sie es mit
for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
N.B. Wie Dennis in den Kommentaren bemerkt hat, müssen Sie die Befehlssubstitution bei ls nicht wirklich durchführen. Ich mache das schon so lange, dass ich das so ziemlich auf Autopilot mache und den Befehl ersetze, den ich brauche, um meine Liste von Dateien zum Vergleich zu bekommen.
Ich habe auch vergessen, hinzuzufügen, dass ich ' \ls ', um meinen Alias von ls auf GNU ls vorübergehend zu deaktivieren, so dass ich die Farbformatierungsinformationen aus der von GNU ls zurückgegebenen Liste verliere.
Wenn ich mit git/svn oder mehreren git/svn-Instanzen auf der Festplatte arbeite, war dies für mich in den letzten 5-10 Jahren eines der nützlichsten Dinge, die jemand nützlich finden könnte:
diff -burN /path/to/directory1 /path/to/directory2 | grep +++
oder:
git diff /path/to/directory1 | grep +++
So erhalten Sie einen Schnappschuss der verschiedenen Dateien, die berührt wurden, ohne dass Sie die Ausgabe "weniger" oder "mehr" machen müssen. Sie können dann einfach die einzelnen Dateien vergleichen.
Hier ist ein Skript, das die Unterschiede zwischen Dateien in zwei Ordnern anzeigt. Es funktioniert rekursiv. Ändern Sie dir1 und dir2.
(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/} $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )
- See previous answers
- Weitere Antworten anzeigen