Tôi cần "cài đặt" một loạt các tệp vào một thư mục khác để giữ nguyên cấu trúc thư mục của các tệp nguồn. Ví dụ, nếu tôi phải ./foo/bar/baz.txt
đi, /var/www/localhost/webroot/
tôi muốn kết quả đạt được /var/www/localhost/webroot/foo/bar/baz.txt
. rsync
có khả năng này --relative
, nhưng khi tôi làm điều này, tôi phát hiện ra nó không thân thiện với các liên kết tượng trưng:
$ 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
Vì vậy, bạn thấy symlink không còn là symlink - các tệp đã được sao chép sai vị trí!
rsync
cũng có --no-implied-dirs
tùy chọn, bề ngoài dường như làm những gì tôi muốn, nhưng nó chỉ hoạt động như tôi dự định khi không thực hiện rsync đệ quy, vì vậy tôi phải:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Có cách nào trực tiếp hơn để thực hiện phản chiếu tệp này mà không xóa sạch các thư mục symlink trung gian (có hoặc không có rsync) không?