Saya perlu "menginstal" banyak file ke direktori lain agar struktur direktori file sumber tetap utuh. Sebagai contoh, jika saya ./foo/bar/baz.txt
akan /var/www/localhost/webroot/
saya ingin hasilnya menjadi /var/www/localhost/webroot/foo/bar/baz.txt
. rsync
memiliki kemampuan ini --relative
, tetapi ketika saya melakukan ini saya menemukan itu tidak ramah untuk symlink:
$ 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
Jadi Anda melihat symlink bukan lagi symlink - file disalin ke tempat yang salah!
rsync
juga memiliki --no-implied-dirs
opsi, yang dangkal tampaknya melakukan apa yang saya inginkan, tetapi hanya berfungsi seperti yang saya inginkan ketika tidak melakukan rsync rekursif, jadi saya harus:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Apakah ada cara lain yang lebih langsung untuk mencapai mirroring file ini tanpa menghapus direktori symlink menengah (dengan atau tanpa rsync)?