Einige Fragen zur Klarstellung:
1. Welche Version von rsync wird auf beiden Systemen benutzt ($ rsync --version)?
2. Welche Art von Link wird benutzt (symbolischer Link oder Hard-Link?)
3. Welchen Timestamp hat FILE_NEW auf <A> und FILE_OLD auf <B> (bei deiner Angabe sehe ich nur den Timestamp der Links)?
Gegeben: Die Transferart ist eine GET-Operation mittels rsync von Host <B> (Quelle) auf Host <A> (Ziel und Working Env).
Fassen wir die von dir genutzten Parameter nochmal zusammen mit Angabe deren Bedeutung aus der man page:
-u #update; skip files that are newer on the receiver
--exclude #exclude files matching PATTERN (--exclude=PATTERN)
-a #archive; equals to -rlptgoD (no -H,-A,-X)
-r #recurse into directories
-l #copy symlinks as symlinks
-p #preserve permissions
-t #preserve modification times
-g #preserve group
-o #preserve owner (super-user only)
-D #same as --devices --specials
--devices #preserve device files (super-user only)
--specials #preserve special files
-z #compress file data during the transfer
-e #choose an alternative remote shell program to use for communication between the local and remote copies of rsync
----------------------------
-l, --links
When symlinks are encountered, recreate the symlink on the destination.
Scheint eindeutig und klar zu sein. Stellt sich die Frage, ob der Schalter "-a" korrekt ist.
Beispiel 1: Nachstellung
$ #Ausgangsbasis
$ ls -l A B
A:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:52 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:52 link1 -> file1
B:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:28 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1
$ #Inhalt A/file1
$ cat A/file1
A
$ #Inhalt B/file1
$ cat B/file1
B
$ #Synchronisiere B (Quelle) auf/nach A (Ziel)
$ rsync -u -az B/ A/
$ #Ergebnis des rsync
$ ls -l A B
A:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:52 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1
B:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:51 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1
$ cat A/file1
A
$ cat B/file1
B
Du kannst sehen, das Ergebnis ist nicht ganz wie von dir beschrieben. Der Link A/link1 wurde ersetzt, die vom Link A/link1 referenzierte Datei mit aktuellerem Timestamp und Inhalt wurde beibehalten, da die Datei einen neueren Timestamp besitzt (Inhalt immer noch wie in Ausgangsbasis).
Fragen:
1. Könnte es sein, dass durch Verwendung von Schalter "-a" (implizit "-l") der Link kopiert wurde und der Schalter "-u" auf Links nicht anwendbar ist, da es sich bei Links nicht um reguläre Dateien handelt?
2. Wurde die vom Link referenzierte Datei FILE_NEW auf <A> nicht mit FILE_OLD von <B> überschieben, was zeigen würde, dass der Schalter "-u" greift?
Beispiel 2: Korrektur des rsync-Aufrufes; Ersetzung des Schalter "-a" gegen "-rptgoD", ohne "-l":
$ rsync -uzrptgoD B/ A/
skipping non-regular file "link1"
$ ls -l A B
A:
total 4
-rw-r--r-- 1 sx sx2 2012-06-07 15:52 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 16:04 link1 -> file1
B:
total 4
-rw-r--r-- 1 sx sx 2 2012-06-07 15:51 file1
lrwxrwxrwx 1 sx sx 5 2012-06-07 15:28 link1 -> file1
$ cat A/file1
A
$ cat B/file1
B
Wenn B/file1 neuer ist, dann würde A/file1 auch ersetzt werden (konnte ich ebenso nachstellen).
Fazit: Es ist im einzelnen zu prüfen, ob Links kopiert werden sollen oder nicht. Sollte man sich mit Angabe des Schalters "-a", implizit "-l", für das Kopieren von Links entscheiden, scheint der Schalter "-u" nicht auf (symbolischen) Links anwendbar zu sein. Andernfalls kann man sich in diesem Beispiel anstelle des Schalters "-a" für "-rptgoD" entscheiden.
Gruß,
escimo