Ich muss eine Reihe von Dateien in einem anderen Verzeichnis "installieren", wobei die Verzeichnisstruktur der Quelldateien intakt bleibt. Wenn ich zum Beispiel ./foo/bar/baz.txt
gehe, /var/www/localhost/webroot/
möchte ich das Ergebnis haben /var/www/localhost/webroot/foo/bar/baz.txt
. rsync
hat diese Fähigkeit in --relative
, aber als ich das tat, stellte ich fest, dass es nicht freundlich zu Symlinks war:
$ ls -ald /var/www/localhost/webroot/ | grep ^l
lrwxrwxrwx 1 www-data www-data 15 2014-01-03 13:45 media -> ../static/media
lrwxrwxrwx 1 root root 13 2014-02-24 13:47 var -> ../static/var
$ rsync -qrR . /var/www/localhost/webroot/
$ ls -ald /var/www/localhost/webroot/ | grep var
drwxr-xr-x 3 root root 4096 2014-02-24 13:52 /var/www/localhost/webroot/var
Sie sehen also, dass der Symlink kein Symlink mehr ist - die Dateien wurden an die falsche Stelle kopiert!
rsync
hat auch die --no-implied-dirs
Möglichkeit, das scheint oberflächlich zu tun , was ich will, aber es funktioniert nur , wie ich beabsichtige , wenn nicht eine rekursive rsync tun, also muss ich:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Gibt es eine direktere Möglichkeit, diese Spiegelung von Dateien durchzuführen, ohne zwischengeschaltete Symlink-Verzeichnisse zu löschen (mit oder ohne rsync)?