Devo "installare" un gruppo di file in un'altra directory mantenendo intatta la struttura delle directory dei file di origine. Ad esempio, se devo ./foo/bar/baz.txt
andare /var/www/localhost/webroot/
voglio che il risultato sia /var/www/localhost/webroot/foo/bar/baz.txt
. rsync
ha questa capacità --relative
, ma quando l'ho fatto ho scoperto che non era facile usare i link simbolici:
$ 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
Quindi vedi che il collegamento simbolico non è più un collegamento simbolico: i file sono stati copiati nel posto sbagliato!
rsync
ha anche l' --no-implied-dirs
opzione, che superficialmente sembra fare quello che voglio, ma funziona solo come intendo quando non faccio una risorsiva ricorsiva, quindi devo:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Esiste un modo più diretto per realizzare questo mirroring dei file senza cancellare le directory intermedie symlink (con o senza rsync)?