cp -L बनाम cp -H


45

मुसीबत

जब फ़ाइलों की प्रतिलिपि बनाई जाती है cp -Hया cp -L, मुझे वही परिणाम मिलते हैं:

$ ls -l fileA
  fileA -> fileB
$ cp fileA somewhere/ -H
$ ls -l somewhere/
  fileA     # fileA is a copy of fileB, only renamed, with same properties!

यहाँ यह उत्तर दोनों विकल्पों को समान UNLESS के साथ संयोजन के रूप में उपयोग करने का वर्णन करता है -R। मेरे लिए नहीं। सॉफ्ट- जैसे कि हार्डलिंक फाइलें उन फाइलों की नामांकित प्रतियों में बदल जाती हैं जो वे स्रोत पर इंगित करती हैं।
 

प्रश्न :

के समुचित उपयोग क्या है cp -Hऔर cp -L? क्या यह अपेक्षित व्यवहार है?


  हल करने के लिए मेरे प्रयास : man cpमुझे काफी दोनों विकल्पों के लिए एक ही बताती है, लेकिन info cpके शब्दों में यह और भी अधिक मेरे लिए भ्रमित करता है। हो सकता है कि कोई मुझे इसे तोड़ने में मदद कर सकता है:

-H यदि एक कमांड लाइन तर्क एक प्रतीकात्मक लिंक को निर्दिष्ट करता है, तो उस फ़ाइल को कॉपी करें जो केवल प्रतीकात्मक लिंक के बजाय इंगित करता है। हालांकि, किसी भी प्रतीकात्मक लिंक को कॉपी करना (उसकी प्रकृति को संरक्षित करना) जो पुनरावर्ती ट्रैवर्सल के माध्यम से सामना करना पड़ता है।

यह मेरे लिए एक विरोधाभास की तरह लगता है: मुझे लगता है कि » एक प्रतीकात्मक लिंक की प्रकृति « है कि यह कहीं इंगित करता है ...

-L, --dereference उनसे कॉपी करते समय प्रतीकात्मक लिंक का पालन करें। इस विकल्प के साथ, cpएक प्रतीकात्मक लिंक नहीं बना सकते। उदाहरण के लिए, स्रोत ट्री में एक सिम्लिंक (नियमित फ़ाइल के लिए) को गंतव्य ट्री में एक नियमित फ़ाइल में कॉपी किया जाएगा।

मुझे पता है कि एक सिमलिंक एक नियमित फ़ाइल नहीं है, लेकिन ... मैं मानता हूँ कि मैं इस स्पष्टीकरण के साथ यहाँ आया हूँ।


दौड़ो info cp, खोजो -R। यह कहता है, Copy directories recursively. लेकिन आप गैर-निर्देशिकाओं के साथ परीक्षण कर रहे हैं। अंतर यह है कि निर्देशिकाओं के अंदर क्या है जो आप कॉपी कर रहे हैं, कमांड लाइन तर्क नहीं।
मिकेल

@Mikel मैंने निर्देशिकाओं की सामग्री की प्रतिलिपि बनाने और निर्देशिकाओं को स्वयं सामग्री के साथ कॉपी करने की कोशिश की है और काफी समान परिणाम प्राप्त किए हैं। इसके अलावा: मैं काफी लंबे समय तक सामने बैठा रहा info cpऔर यह पता लगाने की पूरी कोशिश की कि इस विकल्प पर शब्दों का विकल्प वास्तव में क्या है & ndash; और यह पोस्ट किस बारे में है। पोस्टिंग में वास्तविक info cp
शब्दांकन

जवाबों:


55

सीमलिंक के साथ, टूल में दो चीजें हैं जो वे कर सकते हैं:

  1. सीलिंक को सिम्लिंक के रूप में मानें ("इसकी प्रकृति को संरक्षित करना"), या
  2. सीलिंक को उस फ़ाइल के प्रकार के रूप में मानें जो इसे इंगित करता है।

यह कहना कि -H"अपनी प्रकृति को बनाए रखना" एक विरोधाभास नहीं है। विकल्प पर विचार करें। यदि आप उपयोग करते हैं -L, तो cpपाया जाने वाला कोई भी सिम्लिंक खुल जाएगा, और उनकी सामग्री को लक्ष्य फ़ाइल नाम में कॉपी कर लिया जाएगा। तो स्रोत एक सिम्लिंक था, लेकिन इसकी प्रतिलिपि सिम्लिंक नहीं है। तो यह "एक सिम्लिंक के रूप में अपनी प्रकृति को खो दिया"।

विचार करें

$ mkdir subdir
$ echo "some contents" > subdir/file
$ ln -s file subdir/link

# definition of "list", the abbreviated ls -l output used below
$ list() { ls -l "$@" | \
    awk '$0 !~ /^total/ { printf "%s %s\t%s %s %s\n", $1, $5, $9, $10, $11 }' ; }

$ list subdir
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rH subdir subdir-with-H
$ list subdir-with-H
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rL subdir subdir-with-L
$ list subdir-with-L
-rw-rw-r-- 14   file  
-rw-rw-r-- 14   link  

शानदार जवाब- मुझे यह पसंद है कि आप किस तरह का विकल्प दिखाते हैं। यह मेरे सवाल का काफी जवाब नहीं देता है , जो सहोदर निर्देशिकाओं के प्रति सहानुभूति की नकल करने के बारे में है, लेकिन आपने यह स्पष्ट कर दिया है कि मैं इसका पता लगाने के लिए एक त्वरित प्रयोग कैसे कर सकता हूं। 😉
माइकल Scheper

1
आह, पता चला है कि मैं वास्तव में क्या जानना चाहता था यह था: superuser.com/a/138594/219388
माइकल शेपर

19

के बीच व्यवहार में अंतर -Lऔर -Hजब -rभी निर्दिष्ट किया जाता है। cpउपनिर्देशिकाओं में सिमिलिंक नहीं बनाएंगे, -L -rलेकिन यदि आप इसका उपयोग करेंगे तो -H -r


cp: -H, -L, और -P विकल्प -r विकल्प के साथ निर्दिष्ट नहीं किए जा सकते हैं।
3z33etm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.