Ich verwende diff -r a b
, um Verzeichnisse a und b rekursiv zu vergleichen . Es kommt jedoch häufig vor, dass es einige fehlerhafte Links gibt (dieselben fehlerhaften Links in den Verzeichnissen a und b und Verweise auf dieselben, nicht vorhandenen Ziele).
diff gibt dann Fehlermeldungen für diese Fälle aus und beendet das Programm mit einem Exit-Code ungleich Null. Ich möchte jedoch, dass es still bleibt und beendet das Programm mit 0, da die Verzeichnisse in meinem Buch dieselben sind.
Wie kann ich das machen?
Antworten:
Für Version 3.3 oder höher
diff
sollten Sie die--no-dereference
Option verwenden, wie in der Antwort von Pete Harlan beschrieben .Leider unterstützen ältere Versionen von
diff
nicht das Ignorieren von Symlinks :Wenn Sie nur eine rsync-Überprüfung durchführen möchten (und vermutlich die fehlenden Informationen korrigieren möchten), können Sie den Befehl rsync einfach ein zweites Mal ausführen. Wenn Sie dies nicht möchten, kann es ausreichend sein, das Verzeichnis zu überprüfen .
Wenn Sie dies wirklich tun möchten,
diff
können Siefind
die Symlinks überspringen und diff für jede Datei einzeln ausführen. Übergeben Sie die Verzeichnisse a und b als Argumente:oder als Einzeiler:
Dadurch werden Dateien identifiziert, die sich im Inhalt unterscheiden, oder Dateien, die sich in a, aber nicht in b befinden .
Beachten Sie, dass:
rsync
Szenario.quelle
for f in
ein / * zu finden! -Typ l;do echo $f b/${f#*/};done
. Ich habe momentan jedoch keine Zeit, dies zu testen. Lassen Sie mich wissen, ob das funktioniert.$(xxx)
anstelle von Backticks verwenden. Die Symmetrie der Backticks macht sie weniger lesbar und verhindert das Verschachteln. Zu 1 und 2 siehe stackoverflow.com/questions/11366184/…Seit Version 3.3
diff
unterstützt GNU keine Dereferenzierung von Symlinks, vergleicht dann aber die Pfade, auf die sie zeigen.Installieren Sie GNU
diffutils
> = 3.3 und verwenden Sie die--no-dereference
Option; Dafür gibt es keine kurze Option.Die Diagnose ist stumm, wenn gleich oder:
Symbolische Verknüpfungen
/tmp/noderef/a/symlink
und/tmp/noderef/b/symlink
Unterschiedequelle
Sie können eine neuere Version von verwenden
diff
In
diff
GNUdiffutils
3.3 ist eine--no-dereference
Option enthalten, mit der Sie die Symlinks selbst und nicht ihre Ziele vergleichen können. Es meldet, wenn sie sich unterscheiden, ist leise, wenn sie sich einig sind, und es ist ihnen egal, ob sie kaputt sind.Ich weiß nicht, wann die Option hinzugefügt wurde. es ist in 2.8.1 nicht vorhanden.
quelle