Мені потрібно «встановити» купу файлів до іншого каталогу, зберігаючи структуру каталогів вихідних файлів неушкодженими. Наприклад, якщо я ./foo/bar/baz.txt
збираюся, /var/www/localhost/webroot/
я хочу, щоб результат був /var/www/localhost/webroot/foo/bar/baz.txt
. rsync
має цю здатність --relative
, але коли я це зробив, я виявив, що це не сприятливо до посилань:
$ 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
Отже, ви бачите, що посилання більше не є символьним посиланням - файли були скопійовані в неправильне місце!
rsync
також є --no-implied-dirs
можливість, що зовні здається робити те, що я хочу, але це працює лише так, як я маю намір, коли не роблю рекурсивну rsync, тому мені доведеться:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Чи є якийсь прямий спосіб здійснити це дзеркальне відображення файлів без витирання проміжних каталогів симпосилання (з або без rsync)?