Für Version 3.3 oder höher diffsollten Sie die --no-dereferenceOption verwenden, wie in der Antwort von Pete Harlan beschrieben .
Leider unterstützen ältere Versionen von diff nicht das Ignorieren von Symlinks :
Einige Dateien sind weder Verzeichnisse noch reguläre Dateien: Es handelt sich um ungewöhnliche Dateien wie symbolische Links, spezielle Gerätedateien, Named Pipes und Sockets. Derzeit werden diffsymbolische Links wie normale Dateien behandelt. Andere spezielle Dateien werden wie normale Dateien behandelt, wenn sie auf der obersten Ebene angegeben sind. Beim Vergleich von Verzeichnissen wird lediglich das Vorhandensein dieser Dateien gemeldet. Dies bedeutet, dass patchÄnderungen an solchen Dateien nicht dargestellt werden können. Wenn Sie beispielsweise ändern, auf welche Datei eine symbolische Verknüpfung verweist diff, wird anstelle der Änderung der symbolischen Verknüpfung die Differenz zwischen den beiden Dateien ausgegeben.
diffsollte optional Änderungen an speziellen Dateien speziell melden und patchsollte erweitert werden, um diese Erweiterungen zu verstehen.
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, diffkönnen Sie finddie Symlinks überspringen und diff für jede Datei einzeln ausführen. Übergeben Sie die Verzeichnisse a und b als Argumente:
#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
# Suppress details of differences
diff -rq $f $2/${f##*/}
done
oder als Einzeiler:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
Dadurch werden Dateien identifiziert, die sich im Inhalt unterscheiden, oder Dateien, die sich in a, aber nicht in b befinden .
Beachten Sie, dass:
- Da wir Symlinks vollständig überspringen, wird dies nicht bemerken, wenn in b keine Symlink-Namen vorhanden sind . Wenn Sie dies benötigen, benötigen Sie einen zweiten Find-Pass, um alle Symlinks zu identifizieren, und überprüfen Sie dann explizit, ob sie in b vorhanden sind .
- Zusätzliche Dateien in b werden nicht identifiziert, da die Liste aus dem Inhalt von a besteht . Dies ist wahrscheinlich kein Problem für Ihr
rsyncSzenario.