सवाल प्रतीकात्मक लिंक की प्रतिलिपि कैसे करें?


मेरे पास निर्देशिका है जिसमें कुछ प्रतीकात्मक लिंक हैं:

user@host:include$ find .. -type l -ls
4737414    0 lrwxrwxrwx   1 user group       13 Dec  9 13:47 ../k0607-lsi6/camac -> ../../include
4737415    0 lrwxrwxrwx   1 user group       14 Dec  9 13:49 ../k0607-lsi6/linux -> ../../../linux
4737417    0 lrwxrwxrwx   1 user group       12 Dec  9 13:57 ../k0607-lsi6/dfc -> ../../../dfc
4737419    0 lrwxrwxrwx   1 user group       17 Dec  9 13:57 ../k0607-lsi6/dfcommon -> ../../../dfcommon
4737420    0 lrwxrwxrwx   1 user group       19 Dec  9 13:57 ../k0607-lsi6/dfcommonxx -> ../../../dfcommonxx
4737421    0 lrwxrwxrwx   1 user group       17 Dec  9 13:57 ../k0607-lsi6/dfcompat -> ../../../dfcompat

मुझे उन्हें वर्तमान निर्देशिका में कॉपी करने की आवश्यकता है। परिणामी लिंक उनके प्रोटोटाइप से स्वतंत्र होना चाहिए और सीधे अपने लक्षित वस्तुओं तक ले जाना चाहिए।

  • cp -s लिंक के लिंक बनाता है जो उपयुक्त व्यवहार नहीं है।
  • cp -s -L निर्देशिकाओं के लिंक कॉपी करने से इंकार कर दिया
  • cp -s -L -r गैर-कार्यशील निर्देशिका के सापेक्ष लिंक कॉपी करने से इंकार कर दिया

मुझे क्या करना चाहिए?


156
2018-05-07 04:36


मूल


cp -d मेरी तरफ से काम किया। - m-ric
cp -R एक मैक पर - Mirko


जवाब:


cp --preserve=links

आदमी पृष्ठ से:

   --preserve[=ATTR_LIST]
          preserve  the   specified   attributes   (default:   mode,owner-
          ship,timestamps),  if  possible  additional attributes: context,
          links, xattr, all

व्यक्तिगत रूप से, मैं उपयोग करता हूं cp -av  मेरी भारी प्रतिलिपि के लिए। इस तरह, मैं सबकुछ बचा सकता हूं - यहां तक ​​कि पुनरावर्ती - और आउटपुट देख सकता हूं। बेशक, यह सिर्फ व्यक्तिगत वरीयता है।

आपके अन्य विकल्पों ने ऐसा क्यों नहीं किया जो आपने अपेक्षित किया था, -s एक लिंक बनाता है बजाय कॉपी करने और -L लिंक को कॉपी करने के बजाय फ़ाइल को प्रतिलिपि बनाने के लिए स्रोत में लिंक का पालन करता है।


174
2018-05-07 05:02



आपको जोड़ने की आवश्यकता हो सकती है -R, क्योंकि अन्यथा सीपी निर्देशिकाओं और निर्देशिकाओं को symlinks छोड़ देगा। - Olivier 'Ölbaum' Scherler
मैंने इसे रेडहाट पर करने की कोशिश की और यह काम नहीं करता है - Mansuro
मैक पर? उपयोग cp -a - Steve Tauber
के लिए +1 -a विकल्प। हे, मैंने विकल्पों को देखा है cpमैनुअल अनगिनत बार, फिर भी मैं हमेशा इस पर स्किम किया होगा। अब तक मैं उपयोग कर रहा हूँ -dpr, परंतु -a उन सभी को शामिल करता है, साथ ही कुछ अन्य विशेषताओं का संरक्षण भी शामिल है। अगर मुझे इन अन्य विशेषताओं की आवश्यकता होती तो मैं शायद देखता --preserve विकल्प फिर से और इस्तेमाल किया -dr --preserve=all, जो वास्तव में क्या है -a है! खैर कम से कम मुझे अब पता है - -a सही है और यही वह है जिसे मैं अब से उपयोग करूँगा। - James Haigh
यह सिगविन पर काम नहीं किया। --preserve=links पर्याप्त नहीं था यह अभी भी कहा cp: omitting directory। परंतु -av काम किया। - Chloe


जैसे ही आदमी पृष्ठ कहता है, उपयोग करें -P


34
2018-05-07 04:39



मैक पर -P निर्देशिकाओं पर काम नहीं करता है इसलिए मैंने उपयोग किया cp -a - Steve Tauber
धन्यवाद, मैंने आपके जवाब से एक वर्ष में अब 3 बार अलग-अलग बार देखा और लाभान्वित किया है। इसे याद नहीं कर सकता! - Siddhartha
यह काम करता है, लेकिन मेरा मैन पेज कहता है "-पी कभी भी SOURCE में प्रतीकात्मक लिंक का पालन नहीं करता", जो सहजता से "गंतव्य के लिए सिम्लिंक के रूप में कॉपी सिम्लिंक" जैसा नहीं है। ("कभी भी पालन न करें" यह ध्वनि बनाता है जैसे यह संयोजन में काम करता है -आर) - R.M.
इस cp -P मेरे लिए @kainosnous कामों द्वारा शीर्ष मतदान जवाब के विपरीत। धन्यवाद! - tommy.carstensen
रेडहाट पर काम करता है। स्वीकृत प्रतिक्रिया काम नहीं करती! - Phiber


यदि लिंक में सापेक्ष पथ होते हैं, तो लिंक को कॉपी करने से संबंधित पथ समायोजित नहीं होगा। उपयोग readlinkस्विच के साथ -f लिंक के पूर्ण पथ प्राप्त करने के लिए, पुनरावर्ती रूप से पालन करने के लिए। उदाहरण के लिए:

ln -s $(readlink -f old/dir/oldlink) new/dir/newlink

यदि विकल्प के मुकाबले सापेक्ष पथों को संरक्षित करना चाहते हैं -P का cp, जैसा कि इग्नासिओ वाज़्यूज़-एब्राम द्वारा कहा गया है, वही है जो आपको चाहिए।


26
2018-05-07 05:09



यदि आप जो भी करने की कोशिश कर रहे हैं, वह निरंतर रिश्तेदार होने के लिए एक बुरा विचार हो सकता है कि सिम्लिंक को पूर्ण से संबंधित होने से परिवर्तित करना है। यहां रिकर्सन की आवश्यकता नहीं है, और कभी-कभी जंजीर सिम्लिंक एक कारण के लिए होते हैं। Symlinks अक्सर विकल्प या विन्यास विकल्प निर्दिष्ट करने के लिए प्रयोग किया जाता है। उदाहरण के लिए, मेरे सिस्टम पर एक सिम्लिंक श्रृंखला है /usr/share/dict/words -> /etc/dictionaries-common/words -> /usr/share/dict/british-english जो पसंदीदा शब्दकोश निर्दिष्ट करता है। यदि आप इस श्रृंखला को बार-बार अव्यवस्थित करना चाहते थे, तो परिणामस्वरूप सिम्लिंक इस वरीयता में भविष्य के किसी भी बदलाव को अनदेखा कर देगा। - James Haigh


जैसा कि कुछ ने टिप्पणी की है:

cp -a 

अच्छा काम करता है।

आदमी से:

-a    same as -dR --preserve=all

-R    copy directories recursively
-d    same as --no-dereference --preserve=links
--no-dereference   never follow symbolic links in SOURCE

19
2018-01-27 14:51



... लेकिन केवल अगर सिमलिंक में से कोई भी सापेक्ष पथ के लिए नहीं है। - Michael Scheper


मैंने वास्तव में एक बड़ी निर्देशिका को डुप्लिकेट करने के लिए निम्नलिखित का उपयोग किया। सभी प्रतीकात्मक लिंक संरक्षित किए गए थे, प्रतिलिपि को दोबारा किया गया था और मैं प्रक्रिया की कुछ दृश्य प्रतिक्रिया प्राप्त करने में सक्षम था:

cp -Prv /sourcer_dir/* /target_dir

9
2018-05-15 17:25





अधिकांश समय, जब मुझे कई प्रतीकात्मक लिंक कॉपी करने की आवश्यकता होती है, तो मैं वास्तव में एक निर्देशिका पेड़ को दर्पण करने की कोशिश कर रहा हूं। तो मैं symlinks और बाकी सब कुछ चाहता हूँ।

यह केवल कुछ सिम्लिंक की प्रतिलिपि बनाने के लिए अधिक है, लेकिन यदि आप वास्तव में एक पूरे पेड़ की प्रतिलिपि बनाने की कोशिश कर रहे हैं, तो यह बहुत उपयोगी हो सकता है:

उपयोग टार

user@host:/cwd$ ( cd /path/to/src ; tar cf - . ) | ( cd /path/to/dest ; tar xf - )

टार डिफ़ॉल्ट रूप से symlink को हल नहीं करता है, इसलिए दर्पण प्रति में सिम्लिंक मूल पेड़ के समान स्थानों पर इंगित करेंगे।

यह चाल प्राप्त करने के लिए subshells का उपयोग करता है टार प्रतिबिंबित करने के लिए निर्देशिका की जड़ पर स्थिति में आदेश; आप उनमें से एक को छोड़कर (संबंधित के साथ छोड़ सकते हैं सीडी आदेश) यदि आप पहले से ही हैं src या गंतव्य निर्देशिका:

# already in src?
user@host:/src$ tar cf - . | ( cd /path/to/dest ; tar xf - )

# already in dest?
user@host:/dest$ ( cd /path/to/src ; tar cf - . ) | tar xf - 

# just need src/foo?
# this result will be a mirror copy at dest/foo 
user@host:/src$ tar cf - foo | ( cd /path/to/dest ; tar xf - )

# mirror to another system?
user@host:/src$ tar cf - . | ssh user@example.com '( cd /path/to/dest ; tar xf - )'

फिर, जब भी आप प्रतीकात्मक लिंक कॉपी करना चाहते हैं, यह उचित नहीं है, लेकिन यह जानना बहुत उपयोगी स्निपेट है।


8
2018-05-07 06:03



टैर निश्चित रूप से मेरे अनुभव में सीपी से अधिक पोर्टेबल है - don bright


प्रयत्न: सीपी-प्रो symlink गंतव्य

[root@station1 temp]# ls -l
total 8
-rw-r--r-- 1 root root  0 Jul 27 18:40 abc
lrwxrwxrwx 1 root root 13 Jul 27 18:41 abc.link1 -> /tmp/temp/abc
[root@station1 temp]# cp -rp /tmp/temp/abc.link1 /tmp/temp/abc.link2
[root@station1 temp]# ls -l
total 12
-rw-r--r-- 1 root root  0 Jul 27 18:40 abc
lrwxrwxrwx 1 root root 13 Jul 27 18:41 abc.link1 -> /tmp/temp/abc
lrwxrwxrwx 1 root root 13 Jul 27 18:42 abc.link2 -> /tmp/temp/abc
[root@station1 temp]# 

ओएस - सेंटोस 5 (लिनक्स)


3
2017-07-27 13:15