Wie werden Dateinamen in zwei Verzeichnissen unterschieden (ohne in Zwischendateien zu schreiben)?


31

Ich versuche etwas in der Art von:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Aber das funktioniert aus offensichtlichen Gründen nicht. Gibt es einen besseren Weg, dies zu erreichen (in einer Zeile), als dies?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Vielen Dank

Antworten:



10
diff -rq dir1 dir2

Gehen Sie mit der Option -r ganze Verzeichnisbäume durch und überprüfen Sie rekursiv die Unterschiede zwischen Unterverzeichnissen und Dateien, die an vergleichbaren Stellen in jedem Baum auftreten. Der Trick besteht darin, die Option -q zu verwenden, um zeilenweise Vergleiche zu unterdrücken


3
@festo: Ihnen fehlt der Punkt dieser Frage, ich möchte eigentlich nicht den Inhalt der Dateien unterscheiden, ich möchte die Ausgabe der lsBefehle unterscheiden
bguiz

+1, Eigentlich habe ich die gleiche Ausgabe mit der einen Einschränkung erhalten, diff -rq hat eine verknüpfte Datei als 'Keine solche Datei oder Verzeichnis' gemeldet. Also, plus eins für eine korrekte und ehrlich gesagt einfachere Verwendung. (Auch wenn die Antwort von IVA eine bessere "Lernmöglichkeit" für die Prozessersetzung ist (> _ <)
18.

1
Dies ist viel langsamer als das Vergleichen der Dateinamen: Die Gesamtheit jeder Datei muss gelesen und verglichen werden.
Zaz

@ Josh natürlich, weil es rekursiv tut ....
Braiam

1
@Braiam: Auch wenn Sie die Dateinamen rekursiv unterscheiden ( z. B. rsyncmit der --dry-runOption), ist dies immer noch viel schneller als diff -r.
Zaz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.