rsync beschwert sich über Symlinks

7

Ich verwende die dry-runOption (-n) rsync, um Verzeichnisse auf zwei verschiedenen Systemen zu vergleichen. Mit Standarddateien und -verzeichnissen funktioniert alles einwandfrei. Wenn ich jedoch ein Verzeichnis verwende, das symbolische Links enthält, werden folgende Fehler angezeigt:

> ls -l /usr/user1/server10s/system/
total 1
lrwxrwxrwx   1 localuser  other         37 Jun 19 17:18 nrcalc -> /usr/user2/nrcalc10s
> rsync -n -avrc /usr/user1/server10s/* aisdba@Server:deployment_area/server
building file list ... done
system/
cannot delete non-empty directory: system/nrcalc
could not make way for new symlink: system/nrcalc
template/
template/nrcalc
sent 190 bytes  received 24 bytes  38.91 bytes/sec
total size is 330  speedup is 1.54
rsync error: some files could not be transferred (code 23) at main.c(692)

Ich bin ziemlich froh, dass das Verzeichnis nicht gelöscht werden kann, da ich eigentlich nicht versuche, etwas zu ändern, aber warum versucht es es überhaupt? Übrigens habe ich versucht, die Optionen -l(Links) und -K(Links kopieren) ohne Wirkung hinzuzufügen .

Wie kann ich diesen Vergleich auch mit Symlinks in der Verzeichnisstruktur zum Laufen bringen?

Rojomoke
quelle

Antworten:

7

Wie Sie gezeigt haben, system/nrcalchandelt es sich um einen Symlink auf dem lokalen System, aber um ein Verzeichnis auf dem Remote-Server. Wenn das Verzeichnis auf dem Remote-System nicht leer ist, lehnt rsync das Löschen ab (um Platz für den Symlink zu machen), es sei denn, Sie geben eine --forceoder eine der --deleteOptionen an. Wenn Sie das Verzeichnis am anderen Ende nicht ersetzen möchten, es aber dennoch mit dem Inhalt aktualisieren müssen, auf den der lokale Symlink verweist, können Sie es verwenden --copy-dirlinks.

Rsync beschwert sich darüber, auch wenn --dry-runangegeben, um Sie darauf aufmerksam zu machen, dass das Verzeichnis am anderen Ende entfernt werden muss, um das zu tun, was Sie von ihm verlangen. Wenn Sie eine der Optionen verwenden, die ich in Verbindung mit erwähnt habe -n, erhalten Sie einen sauberen Trockenlauf, ohne etwas zu löschen.

Was die anderen Optionen betrifft, die Sie ausprobiert haben:

  • Die -KOption ( --keep-dirlinks) entspricht --copy-dirlinks, außer auf der Zielseite. Ihr Symlink befindet sich auf der Quellseite, weshalb diese Option für Sie keine Auswirkungen hatte.

  • Die -lOption ( --links) stellt sicher, dass Symlinks als Symlinks kopiert werden. Ohne --forceoder --deletelehnt rsync es jedoch erneut ab, ein nicht leeres Verzeichnis durch einen Symlink zu ersetzen. Außerdem -aimpliziert -l, so dass Sie es die ganze Zeit mit ohnehin habe.

James Sneeringer
quelle