Cp -r और cp -R (कॉपी कमांड) के बीच अंतर


60

cp -rफ़ाइलों को पुनरावर्ती रूप से कॉपी करने के cp -Rलिए है , और निर्देशिकाओं को पुनरावर्ती रूप से कॉपी करने के लिए। लेकिन मैंने जाँच की है, और दोनों फाइलों और निर्देशिकाओं को कॉपी करने के लिए दिखाई देते हैं, एक ही बात। तो, वास्तव में अंतर क्या है?


2
लिनक्स मैनुअल में इन विकल्पों का हर उल्लेख कहता है कि वे समानार्थी हैं। (वे कुछ अन्य यूनिक्स वेरिएंट पर नहीं हैं।)
गिल्स

जवाबों:


74

जबकि -Rपॉज़िक्स अच्छी तरह से परिभाषित है, -rपोर्टेबल नहीं है!

लिनक्स में, जीएनयू और बिजीबॉक्स कार्यान्वयन में cp, -rऔर -Rसमकक्ष हैं।

दूसरी तरफ, जैसा कि आप POSIX मैनुअल पेज में पढ़ सकते हैं cp, -rव्यवहार कार्यान्वयन-परिभाषित है

    * If  neither  the  -R  nor  -r  options were specified, cp shall take
      actions based on the type and contents of the file referenced by the
      symbolic link, and not by the symbolic link itself.

    * If the -R option was specified:

       * If  none  of  the  options  -H,  -L, nor -P were specified, it is
         unspecified which of -H, -L, or -P will be used as a default.

       * If the -H option was specified, cp shall take  actions based on
         the type and contents of the file referenced by any symbolic link
         specified as a source_file operand.

       * If the -L option was specified, cp shall take  actions based  on
         the type and contents of the file referenced by any symbolic link
         specified as a source_file operand or any symbolic links encoun-
         tered during traversal of a file hierarchy.

       * If  the  -P option was specified, cp shall copy any symbolic link
         specified as a source_file operand and any symbolic links encoun-
         tered  during traversal of a file hierarchy, and shall not follow
         any symbolic links.

    * If the -r option was  specified,  the  behavior  is implementation-
      defined.

14
मतभेदों में से एक यह होगा कि, उदाहरण के लिए, OSX में, -rप्रतीकात्मक लिंक द्वारा बताई गई वास्तविक फ़ाइलों को कॉपी करेगा , जबकि प्रतीकात्मक लिंक -Rको कॉपी करेगा जो कि अधिकांश समय का इरादा है।
nacho4d

19

अंतर यह है कि एक लोअरकेस "आर" का उपयोग करता है और दूसरा एक राजधानी "आर" का उपयोग करता है। उससे परे, कोई अंतर नहीं। अगर आप --recursiveलंबे विकल्प का उपयोग करते हैं तो एक ही बात ।


4
मैन पेज से: -R, -r, --recursive - कॉपी डायरेक्ट्रीज़ को पुनरावर्ती रूप से
डेव जेनिंग्स

6
@DaveJennings: सिर्फ इसलिए कि वे एक मंच पर समान हैं इसका मतलब यह नहीं है कि वे सभी पर हैं। cpवहाँ के कुछ कार्यान्वयन पर वास्तव में एक अंतर है। रैंडम 832 का जवाब देखें । @ इग्नासियो में आपको इस उत्तर में एक क्वालीफायर शामिल होना चाहिए जो कहता है कि "यदि आपका cpआधुनिक जीएनयू कार्यान्वयन है" या ऐसा कुछ।
कालेब

@ कालेब: प्रश्न को "लिनक्स" टैग किया गया है। और क्या होगा?
इग्नासियो वाज़केज़-अब्राम्स

3
-R -r कुछ प्रणालियों पर अलग-अलग व्यवहार देता है जो मैं उपयोग करता हूं (ओएस एक्स, फ्रीबीएसडी, बिजीबॉक्स कोरुटिल्स; निश्चित नहीं कि जो इस समय हैं)। मैंने बहुत पहले निर्णय लिया था कि यह हमेशा -Rकेवल उपयोग करने के लिए विवेकपूर्ण है , और वास्तव में उल्लेखित सिस्टम पेजों में से कुछ मैन पेज भी सुझाते हैं।
डबियसजिम

17

लोअरकेस -rएक पुराना विकल्प था, जिसे 4.1BSD में पेश किया गया था, जो फाइलों के रूप में सभी गैर-निर्देशिकाओं को कॉपी करेगा। यही है, अगर यह एक डिवाइस या फीफो का सामना करता है, तो यह इसे खोल देगा, सामग्री को पढ़ेगा, और सामग्री के साथ गंतव्य पर एक फ़ाइल बना सकता है।

अपरकेस -Rएक मानकीकृत विकल्प था (4.4BSD में BSD के लिए पेश किया गया था, हालाँकि पहले के संस्करणों में इसका एक पर्याय के रूप में था -r), जो किसी डिवाइस, FIFO, या अन्य विशेष फ़ाइल से मुठभेड़ करने पर, गंतव्य पर एक समान विशेष फ़ाइल बनाता है।

कई कार्यान्वयन अभी भी इस अंतर को बनाए रखते हैं, लेकिन कुछ (जीएनयू संस्करण लिनक्स के लिए विशिष्ट सहित) केवल -Rशब्दार्थ प्रदान करते हैं , -rएक पर्याय के रूप में।


3

ओएस एक्स में और फ्रीबीएसडी के पुराने संस्करण कोरुटिल्स -rकी तरह हैं -R -L --copy-contents, या यह सिम्बलिंक का अनुसरण करता है और विशेष फाइलों और एफआईएफओ की सामग्री को पढ़ता है।

mkdir a;touch b;ln -s $PWD/b a;cp -r a cसिम्लिंक को OS X में लक्ष्य फ़ाइल के साथ बदल देता है, mkdir a;mkfifo a/b;cp -r a cFIFO को पढ़ने से अवरुद्ध हो जाता है, और शून्य से mkdir a;ln -s /dev/zero a;cp -r a bभरना शुरू कर देता है b/zero

से cpओएस एक्स और FreeBSD के पुराने संस्करणों में आदमी पेज:

Historic versions of the cp utility had a -r option.  This implementation
supports that option; however, its use is strongly discouraged, as it
does not correctly copy special files, symbolic links, or fifo's.

FreeBSD के नए संस्करणों में इसके -rबराबर है -RL:

Historic versions of the cp utility had a -r option.  This  implementation
supports that option, however, its  behavior is different from historical
FreeBSD behavior.   Use of this option is strongly discouraged as the
behavior is implementation-dependent.  In FreeBSD,  -r is a synonym for
-RL and works the same unless modified by other flags.  Historical  imple-
mentations  of -r differ as they copy special files as normal files while
recreating  a hierarchy.

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :

--copy-contents

यदि पुनरावर्ती रूप से प्रतिलिपि बनाई जा रही है, तो किसी विशेष फ़ाइल (जैसे, FIFOs और डिवाइस फ़ाइलों) की सामग्री की प्रतिलिपि बनाएँ जैसे कि वे नियमित फ़ाइलें थीं। इसका मतलब है कि प्रत्येक स्रोत फ़ाइल में डेटा को पढ़ने और इसे गंतव्य पर लिखने की कोशिश की जा रही है। यह आमतौर पर इस विकल्प का उपयोग करने के लिए एक गलती है, क्योंकि यह आमतौर पर विशेष फ़ाइलों जैसे एफआईएफओ और आमतौर पर /devनिर्देशिका में पाए जाने वाले लोगों पर अवांछनीय प्रभाव पड़ता है । ज्यादातर मामलों में, cp -R --copy-contentsएफआईएफओ और विशेष फाइलों जैसे से पढ़ने के लिए अनिश्चित काल तक लटका रहेगा /dev/console, और यदि आप इसे कॉपी करने के लिए उपयोग करते हैं तो यह आपके गंतव्य डिस्क को भर देगा /dev/zero। इस विकल्प का तब तक कोई प्रभाव नहीं पड़ता है जब तक कि पुनरावर्ती रूप से कॉपी नहीं किया जाता है, और यह प्रतीकात्मक लिंक की नकल को प्रभावित नहीं करता है।


-1

अंतर में से एक मैंने पाया कि -R छिपी हुई निर्देशिकाओं की प्रतिलिपि नहीं बनाता है जबकि -R छिपी हुई निर्देशिकाओं की प्रतिलिपि बनाता है।

मैंने इसे। टाइट डायरेक्टरी में टार्गेट डाइरेक्टरी में टेस्ट किया और उपरोक्त निष्कर्ष पर आया। मैं वर्तमान में सेंटो का उपयोग कर रहा हूं।

मैं गलत हो सकता हूं लेकिन यह चर्चा के लिए खुला है।


4
मैं इसे CentOS 5 पर नहीं देखता हूं; -rऔर -Rदोनों छिपा निर्देशिका कॉपी
माइकल Mrozek
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.