ฉันต้อง "ติดตั้ง" กลุ่มของไฟล์ไปยังไดเรกทอรีอื่นซึ่งทำให้โครงสร้างไดเรกทอรีของไฟล์ต้นฉบับไม่เปลี่ยนแปลง ตัวอย่างเช่นถ้าผมได้./foo/bar/baz.txt
ไปฉันต้องการผลที่ได้จะเป็น/var/www/localhost/webroot/
มีความสามารถนี้แต่เมื่อฉันทำสิ่งนี้ฉันค้นพบว่ามันไม่เป็นมิตรกับ symlinks:/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
ดังนั้นคุณจะเห็นว่า symlink ไม่ใช่ symlink อีกต่อไป - ไฟล์ถูกคัดลอกไปยังที่ที่ไม่ถูกต้อง!
rsync
นอกจากนี้ยังมี--no-implied-dirs
ตัวเลือกที่ดูเหมือนเผินๆว่าจะทำในสิ่งที่ฉันต้องการ แต่มันก็ใช้งานได้ตามที่ฉันตั้งใจเมื่อไม่ได้ทำ rsync ซ้ำดังนั้นฉันจึงต้อง:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
มีวิธีอื่นอีกหรือไม่ที่จะทำมิเรอร์ไฟล์ให้สำเร็จโดยไม่ต้องกำจัดไดเรกทอรี symlink ระดับกลาง (โดยมีหรือไม่มี rsync)