rsync

2012-03-19 17 views
6

के माध्यम से केवल प्रतीकात्मक लिंक कॉपी करने के लिए कैसे करें मैं केवल प्रतीकात्मक लिंक (और फ़ाइल को इंगित नहीं करता) या rsync का उपयोग कर अन्य फ़ाइलों की प्रतिलिपि कैसे बना सकता हूं?rsync

मैं

rsync -uvrl input_dir output_dir

कोशिश की, लेकिन मैं विशेष रूप से केवल सांकेतिक लिंक को कॉपी करने की जरूरत है?

किसी भी चाल का उपयोग कर विकल्पों को छोड़कर शामिल करें?

उत्तर

6

प्रति this question+answer, आप इसे पाइप के रूप में स्क्रिप्ट कर सकते हैं। पाइप्स शैल प्रोग्रामिंग और शैल स्क्रिप्टिंग का एक अभिन्न हिस्सा हैं।

find /path/to/files -type l -print | \ 
    rsync -av --files-from=- /path/to/files [email protected]:/path 

यहां क्या हो रहा है?

find कमांड/पथ/से/फाइलों पर शुरू होता है और उस बिंदु के नीचे "सब कुछ" के माध्यम से पुनरावर्ती कदम उठाता है। find के विकल्प ऐसी स्थितियां हैं जो -print विकल्प द्वारा आउटपुट को सीमित करती हैं। इस मामले में, -type l की केवल चीजें (man find के अनुसार प्रतीकात्मक लिंक) को "मानक आउटपुट" खोजने के लिए मुद्रित किया जाएगा।

ये फ़ाइलें rsync कमांड के --file-from विकल्प का "मानक इनपुट" बन गईं।

इसे एक शॉट दें। मेरे पास वास्तव में परीक्षण नहीं किया गया है यह, लेकिन ऐसा लगता है कि इसे काम करना चाहिए।

+0

धन्यवाद मैं इसे एक कोशिश .... – Newbiee

+0

यह सिमलिंक के रूप में सिमलिंक कॉपी नहीं करेंगे, हालांकि दे देंगे। – Dan

+0

@Dan ... ठीक है, '-a'' -rlptgoD' में अनुवाद करता है, और '-l' को दस्तावेज़ित किया जाता है, "जब सिम्लिंक का सामना किया जाता है, तो गंतव्य पर सिम्लिंक को फिर से बनाएं।" आपको क्या परिणाम मिले? – ghoti

4

आप find input_dir -not -type l के साथ लिंक को छोड़कर फ़ाइलों की एक सूची उत्पन्न कर सकते हैं, rsync का विकल्प है --exclude-from=exlude_file.txt

आप दो चरणों में यह कर सकते हैं:

find input_dir -not -type l > /tmp/rsync-exclude.txt

rsync -uvrl --exclude-from=/tmp/rsync-exclude.txt input_dir output_dir

एक पंक्ति बैश :

rsync -urvl --exclude-from=<(find input_dir -not -type l | sed 's/^..//') input_dir output_dir

+0

धन्यवाद मैं इसे आज़मा दूंगा .... – Newbiee

1

आप की तरह और अधिक आसानी से यह कर सकते हैं:

find /path/to/dir/ -type l -exec rsync -avP {} ssh_server:/path/to/server/ \; 

संपादित करें: आप केवल यह पुनरावर्ती किए बिना वर्तमान निर्देशिका की सांकेतिक लिंक कॉपी करना चाहते हैं। आप कर सकते हैं:

find /path/to/dir/ -maxdepth 1 -type l -exec rsync -avP {} ssh_server:/path/to/server/ \;