सिमलिंक की प्रतिलिपि बनाएँ और जहाँ यह rsync का उपयोग करने के लिए इंगित करता है


11

यह करने की आवश्यकता नहीं है rsync, लेकिन यह अच्छा होगा कि ऐसा करने के लिए एक स्क्रिप्ट लिखना न पड़े, और rsyncमैं जो चाहता हूं उसके बहुत करीब हूं।

rsync -a(या -l) सीमलिंक को संरक्षित कर सकते हैं, और -Lसिम्फ़लिंक को निष्क्रिय कर सकते हैं और इसे कॉपी कर सकते हैं जैसे कि यह सामान्य फ़ाइल / डायर है। हालाँकि, क्या सिमलिंक रखना संभव है, और लिंक को इंगित करने वाली फ़ाइलों / निर्देशिकाओं की प्रतिलिपि भी बनाएं?

यहाँ एक उदाहरण है। कहें कि हमारे पास यह फ़ोल्डर पदानुक्रम है:

dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others

और जब मैं rsync -aR dirA dest(या कुछ और) करता हूं, तो मैं चाहता हूं कि ये बिल्कुल इसमें दिखाई दें dest:

dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2

क्या यह संभव है rsync? धन्यवाद।

आइए मान लें कि पूर्ण पथ पर मौजूद सहानुभूति या स्रोत निर्देशिका के बाहर की ओर इशारा किया जा सकता है।


1
मुझे लगता है कि आपका अनुरोध अंडरस्क्राइब किया गया है: आपको आवश्यकता है कि अगर dirA/linkकोई सिमलिंक है ../dirB/file, तो इसे और इसे कॉपी dirB/fileकरने के रूप में संभाला जाना चाहिए । यदि कोई लिंक हो तो क्या होगा ? क्या होता है, सामान्य रूप से, अगर एक निर्देशिका की ओर इशारा करता है जो कि निर्देशिका पेड़ में ऊपर है? dest/dirB/filedirA/linkdest/dirA/linkdirA/link../../another_filedirA/link
रिकार्डो मुर्री

अच्छी पकड़। मेरे उपयोग के मामले में, पेड़ के बाहर कोई लिंक बिंदु नहीं है, और लिंक में कोई पूर्ण पथ नहीं है।
वी-यिन

1
जितना अधिक मैं इसके बारे में सोचता हूं, मुझे लगता है कि कोई मानक उपयोगिता ऐसा नहीं करेगी। सामान्य स्थिति में, यह, एक ही स्रोत दिए गए स्थलों में से एक बड़ी संख्या बनाने के लिए अगर आप एक सिमलिंक करने के लिए एक सिमलिंक या अधिक आम तौर पर एक सिमलिंक जिसका लक्ष्य एक सिमलिंक (शामिल है आवश्यकता हो सकती है जैसे a -> b, b -> c/foo, c -> d/e: नकल के लिए एक अनुरोध aभी कॉपी चाहिए b, c, c/foo, d, d/eऔर d/e/foo)।
गिल्स एसओ- बुराई को रोकना '

@ गिल्स: हाँ, आप सही हैं। ट्रैकिंग लिंक में बहुत सारी फाइलें शामिल हो सकती हैं, जब तक कि वे अभी भी स्रोत निर्देशिका के अंदर हैं।
वी-यिन

जवाबों:


2

यदि आप सिम्लिंक नाम जानते हैं और लिंक और लक्ष्य को स्थानांतरित करना चाहते हैं:

rsync -a 'symlink' .
realdir="$(basename "$(readlink -f 'symlink')")"
rsync -a "$realdir" .

पहले rsyncस्थानान्तरण सिर्फ symlink। दूसरा कमांड वास्तविक निर्देशिका नाम पाता है, और दूसरा rsyncनिर्देशिका सामग्री को स्थानांतरित करता है।


0

यह संभव होगा अगर और केवल अगर आप ये सभी ir mydir ’में थे और आप d mydir’ को एक स्थान से दूसरे स्थान पर rsync करने के लिए थे। Rsync आपके द्वारा दिए गए पथ के बाहर कॉपी करने में सक्षम नहीं है (लिंक के अपवाद के साथ)। जैसे

mydir/dirA ...
mydir/dirB ...
...

हां, यह धारणा मेरे उपयोग के मामले में फिट है। सभी लिंक mydir के अंदर हैं।
वी-यिन

@ वी-यिन तो इसे
सिम्बलिंक

@xenoterracide: कोई फर्क नहीं पड़ता कि आप rsync को कैसे आमंत्रित करते हैं, मुझे लगता है कि यह प्रत्येक स्रोत (प्रमुख निर्देशिकाओं के निर्माण के अलावा) के लिए एक ही गंतव्य बनाएगा। लेकिन वी-यिन दो या अधिक गंतव्य बनाना चाहता है: लिंक, और इसका लक्ष्य।
गिल्स एसओ- बुराई को रोकना '

जाहिर तौर पर मैं उलझन में हूँ ...
xenoterracide

@ गिल्स: सिसिंक का पालन करने के लिए rsync की कोई आवश्यकता नहीं है, क्योंकि यह वैसे भी लक्ष्य को सिंक करेगा । तो यह पहले सिम्बलिंग को कॉपी करता है, जिससे झूलने वाला सिमलिंक बनता है। फिर यह निर्देशिका में सब कुछ कॉपी करने के लिए चला जाता है, जिसमें सिमलिंक का लक्ष्य भी शामिल है। वोइला, सब कुछ एक साथ अच्छी तरह से फिट बैठता है।
मार्टिन वी। लोविस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.