लिनक्स में कमांड लाइन पुनरावर्ती / गहरी निर्देशिका कॉपी?


13

लिनक्स में एक पुनरावर्ती / गहरी निर्देशिका प्रतिलिपि बनाने का एक अच्छा, सामान्य तरीका क्या है जो ज्यादातर मामलों में काम करता है? मैंने सरल चीजों का उपयोग किया है और cp -Rसाथ ही साथ काफी विस्तार भी किया है cpio। क्या कोई महत्वपूर्ण ताकत या कमजोरियां हैं जिनके कारण आप एक दूसरे को पसंद करते हैं? आप सबसे अधिक किसका उपयोग करते हैं?

जवाबों:


29
NAME
cp - copy files and directories

-a, --archive
   same as -dpR

-d     same as --no-dereference --preserve=links
-p     same as --preserve=mode,ownership,timestamps
-R, -r, --recursive
    copy directories recursively

तो आपके प्रश्न के उत्तर में:

cp -a /foo /bar

प्रतीकात्मक लिंक और फ़ाइल / निर्देशिका 'मोड' 'स्वामित्व' और 'टाइमस्टैम्प' को संरक्षित करते हुए डायरेक्टरी / फ़ू से डायरेक्टरी / बार तक सब कुछ कॉपी करें।


यह निश्चित रूप से एक बहुत ही सीधे-आगे और सुरुचिपूर्ण समाधान है। क्या आपने कभी इस दृष्टिकोण में कोई कमी पाई है? फ़ाइल सिस्टम वितरित? बहुत बड़ी प्रतियां? क्या आपने कुछ मामलों में cpio, tar, या rsync जैसे अन्य समाधान पाए हैं?
ग्रेग मैट्स

1
जब तक कोई शारीरिक त्रुटि न हो, मैंने मेमोरी से स्थानीय 'cp' को कभी भी विफल नहीं किया है (मैंने केवल टीबी के आकार के स्थानांतरण किए हैं) किसी भी स्थान पर स्थित स्थानीय (एनएफएस या सांबा माउंटिंग की परवाह किए बिना)। उदाहरणों के लिए rsync मैन पेज के अंतर्गत चेकआउट 'USAGE' को आप शिक्षाप्रद पाएंगे। मेरा पसंदीदा: $ rsync --partial --progress --rsh = ssh --archive --verbose --compress foo / उपयोगकर्ता @ hosname: ~ / बार (rsync -avzP)
गैरेथ

जैसा कि मैंने ऊपर उल्लेख किया है, -a कड़ाई से पोर्टेबल नहीं है।
मैथ्यू फ्लैशेन

वैसे मुझे पता है कि बिजीबॉक्स, जीएनयू और बीएसडी सीपी ठीक हैं। विरासत यूनिक्स बक्से के अलावा मैंने कभी नहीं देखा कि उस पर क्या काम नहीं होगा? मैं वास्तव में इस बिंदु को नहीं देखता हूं, हालांकि मैं पूरी तरह से जोर्डेचे की भावना को समझता हूं "यह हमेशा सही ढंग से काम पाने के लिए लगता है, इसलिए मैंने प्रतिस्थापन खोजने के लिए वास्तव में कभी मुश्किल नहीं देखा।"
गारेथ

@gyaresu कृपया अपनी दूसरी टिप्पणी को दूसरे उत्तर में विभाजित करने पर विचार करें ताकि हम उस पर मतदान कर सकें।
ग्रेग मैट्स

6

मैं अक्सर "cd $ srcdir; tar -c। | Tar -C $ destdir -x" जैसी कमांड का उपयोग करता हूं । लेकिन मैं rsync -a $ src $ dst का भी उपयोग करता हूं।

टार सॉल्यूशन की सबसे बड़ी ताकत यह है कि यह वही है जो मुझे कई साल पहले एक सिस्टम पर उपयोग करना था जिसमें cpio, rsync या cp नहीं था जो पुनरावर्ती कॉपी करेगा। टार हर जगह बहुत ज्यादा है। यह मेरे सिर पर अटका हुआ है क्योंकि मैंने इसका बहुत उपयोग किया है, शायद अधिक सुरुचिपूर्ण तरीके हैं। यह हमेशा सही ढंग से काम पाने के लिए लगता है, इसलिए मैंने प्रतिस्थापन खोजने के लिए वास्तव में कभी मुश्किल नहीं देखा।


मुझे "टार की सर्वव्यापकता" बहुत पसंद है। मैं अन्य संपादन वातावरणों को पसंद करने के बावजूद समान कारणों से vi में कुशल हूं।
ग्रेग मैट्स

-R लंबे समय से मानक का हिस्सा रहा है ( opengroup.org/onlinepubs/009695399/utilities/cp.html ) हालांकि -a नहीं।
मैथ्यू फ्लैशेन

@ मैथ्यू फ्लेशेन: क्या आपकी टिप्पणी @ ग्यारसु के उत्तर के लिए है?
ग्रेग मैट्स

यह इस के लिए भी प्रासंगिक है, क्योंकि ज़ॉर्दाचे ने कहा कि उसने एक प्रणाली का सामना किया है जो "[...] नहीं है जो एक प्रतिरूप की नकल करेगा"। मूल रूप से, -R -> पोर्टेबल, -a -> पोर्टेबल नहीं।
मैथ्यू फ्लैशेन

1
यह वापस ~ 95 में था और सिस्टम यूनिक्स के 80 के दशक के अंत में चल रहा था। मुझे नहीं लगता -R cp के लिए एक विकल्प था, लेकिन मैं निश्चित नहीं हूं। मैंने सीखा है कि tidbit usenet को पढ़ना।
ज़ॉडेचेस

6

एक नज़र डालें rsync ... मुझे यह पसंद है क्योंकि आप दो निर्देशिकाओं को अद्यतित रखते हुए कम डेटा की प्रतिलिपि बनाते हैं ... यह दूरस्थ रूप से भी काम कर सकता है। अपने सरलतम रूप में rsync -a / src / dest


यह वास्तव में एक अच्छा बिंदु है। अनिवार्य रूप से rsync में "डायरेक्टरी डिफरेंट" की गणना करने और डायरेक्ट्री को सिंक्रोनाइज़ करने के लिए केवल वही ट्रांसफर करने की क्षमता है। तो आप बार-बार rsync -a src / dest जैसी कुछ चीज़ों को "लगातार कॉपी" निर्देशिकाओं को पुनरावर्ती रूप से कॉल कर सकते हैं (उचित सिंक्रनाइज़ेशन के लिए src / अनुगामी आवश्यक है) जबकि cp -a src / dest ऐसा काम नहीं करता है। Cp कमांड पहले cp के बाद भाग्य में एक नया src डायरेक्टरी बनाएगी। आपको बाद की प्रतियों के लिए cp -au src / * dest जैसी कुछ की आवश्यकता होगी।
ग्रेग मैट्स

दूसरा कारण जो मुझे rsync पसंद है वह यह है कि आप इसे-फ्लैग पास कर सकते हैं, जो एक प्रगति बार दिखाता है। यह आपको कुछ विचार देता है कि कुछ को कितना समय लगेगा
रोरी

0

rsyncएक महान उपकरण है। यह डेटा ट्रांसफर करने का स्विस सेना का चाकू है। यह इतना सरल और शक्तिशाली उपकरण है। एक बार जब आप इसका इस्तेमाल करना शुरू कर देते हैं, तो आप चौंक जाते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.