मुझे स्रोत फ़ाइलों की निर्देशिका संरचना को अक्षुण्ण रखते हुए फाइलों का एक गुच्छा दूसरी निर्देशिका में "स्थापित" करने की आवश्यकता है। उदाहरण के लिए, मैं किया है ./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 के बिना) को मिटाए बिना फ़ाइलों के इस मिररिंग को पूरा करने के लिए है?