Gibt es Linux / Unix-Tools, die alle Dateien in einem Verzeichnis finden, die in einem anderen nicht vorhanden sind? Grundsätzlich suche ich diff, das auf der Ausgabe von ls funktioniert.
Kurze und süße Skripte werden ebenfalls geschätzt.
Gibt es Linux / Unix-Tools, die alle Dateien in einem Verzeichnis finden, die in einem anderen nicht vorhanden sind? Grundsätzlich suche ich diff, das auf der Ausgabe von ls funktioniert.
Kurze und süße Skripte werden ebenfalls geschätzt.
Antworten:
diff
macht das schon:
diff dir1 dir2
Beispielausgabe:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
Bash:
diff <(cd dir1; ls) <(cd dir2; ls)
Vergleichen Sie nur die Dateinamen - nicht den Inhalt der Dateien.
ls
, find
sondern verwenden!
Wie Ihnen hier bereits gesagt wurde, können Sie DIFF in verschiedenen Nutzungsvarianten verwenden. Oder Sie verwenden dirdiff
stattdessen einfach , was für das gedacht ist, was Sie versuchen! :-)
Aber wenn Sie einige Verzeichnisse synchron halten möchten, sollten Sie sich das unbedingt ansehen rsync
.
Grüße
Wenn Sie dies auch in allen Unterverzeichnissen tun möchten, ist dies eine gute Möglichkeit:
diff --brief -r dir1/ dir2/
Ich bevorzuge die Verwendung von Brief, aber Sie können das weglassen, wenn Sie wollen.
Dennis Williamson hatte eine gute Antwort , aber ich musste dies rekursiv tun. GNU findutils 4.7.0 sortiert seine Ausgabe nicht, daher habe ich Folgendes verwendet
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Um dies nur in eine Richtung zu tun und eine Liste von Dateien zu erstellen, habe ich Folgendes verwendet:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Damit dies ordnungsgemäß funktioniert, sollten weder $ dir1 noch $ dir2 den abschließenden Schrägstrich enthalten.
diff dir1 dir2 | grep "Only"