Ich versuche, die Dateien zu finden, die in einem Verzeichnis vorhanden sind, aber nicht im anderen, habe ich versucht, diesen Befehl zu verwenden:
diff -q dir1 dir2
Das Problem mit dem obigen Befehl ist, dass er sowohl die Dateien in dir1
, aber nicht in dir2
, als auch die Dateien in dir2
, aber nicht in dir1
findet,
Ich versuche, nur die Dateien in dir1
, aber nicht in dir2
zu finden.
Hier ist ein kleines Beispiel dafür, wie meine Daten aussehen
dir1 dir2 dir3
1.txt 1.txt 1.txt
2.txt 3.txt 3.txt
5.txt 4.txt 5.txt
6.txt 7.txt 8.txt
Eine weitere Frage, die mir durch den Kopf geht, ist, wie kann ich die Dateien in dir1
, aber nicht in dir2
oder dir3
mit einem einzigen Befehl finden?
diff -r dir1 dir2 | grep dir1 | awk '{print $4}' > difference1.txt
Erläuterung:
diff -r dir1 dir2
zeigt an, welche Dateien nur in dir1 und welche nur in dir2 vorhanden sind und auch die Änderungen der Dateien, die in beiden Verzeichnissen vorhanden sind, falls vorhanden.
diff -r dir1 dir2 | grep dir1
zeigt, welche Dateien sich nur in dir1 befinden
awk
gibt nur den Dateinamen aus.
comm -23 <(ls dir1 |sort) <(ls dir2|sort)
Mit diesem Befehl erhalten Sie die Dateien, die sich in dir1 und nicht in dir2 befinden.
Über <( )
Zeichen, können Sie es als 'Prozess Substitution' googeln.
vim's DirDiff Plugin ist ein weiteres sehr nützliches Werkzeug zum Vergleichen von Verzeichnissen.
vim -c "DirDiff dir1 dir2"
Es listet nicht nur auf, welche Dateien sich zwischen den Verzeichnissen unterscheiden, sondern erlaubt Ihnen auch, die Dateien, die sich unterscheiden, mit vimdiff zu untersuchen/zu ändern.