Je dois "installer" un tas de fichiers dans un autre répertoire en gardant intacte la structure de répertoires des fichiers source. Par exemple, si j'y ./foo/bar/baz.txt
vais, /var/www/localhost/webroot/
je veux que le résultat soit /var/www/localhost/webroot/foo/bar/baz.txt
. rsync
a cette capacité --relative
, mais quand je l'ai fait, j'ai découvert qu'il n'était pas convivial pour les liens symboliques:
$ 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
Vous voyez donc que le lien symbolique n'est plus un lien symbolique - les fichiers ont été copiés au mauvais endroit!
rsync
a également l' --no-implied-dirs
option, qui semble superficiellement faire ce que je veux, mais cela ne fonctionne que comme je le souhaite lorsque je ne fais pas de rsync récursif, donc je dois:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Existe-t-il un moyen plus direct d'accomplir cette mise en miroir de fichiers sans effacer les répertoires de liens symboliques intermédiaires (avec ou sans rsync)?