लिनक्स में निर्देशिका संरक्षण पथ फ़ाइल की प्रतिलिपि कैसे करें?


88

मेरे पास ग्रहण परियोजनाएं हैं और उनमें ".project" फ़ाइल है, निर्देशिका संरचना ' myProject/.project' जैसी दिखती है । मैं इन '.project' फाइलों को दूसरी डायरेक्टरी में कॉपी करना चाहता हूं, लेकिन मैं चाहता हूं कि इनक्लोजिंग डायरेक्टरी नाम को संरक्षित रखा जाए।

मान लीजिए कि मेरे पास ' a/myProject/.project' है, मैं ' myProject/.project' से ' b' की नकल करना चाहता हूं , इसलिए यह ' b/myProject/.project' है, लेकिन ' b/myProject' मौजूद नहीं है। जब में कोशिश करता हूँ:

 cp -r ./myProject/.project ../b

यह केवल 'myproject' निर्देशिका के बिना '.project' फ़ाइल को कॉपी करता है। कृपया सलाह दें।

जवाबों:


153

आपको जो स्विच चाहिए --parents, वह है :

jim@prometheus:~$ cp --parents test/1/.moo test2/
jim@prometheus:~$ ls -la test2/
total 42
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 .
drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 ..
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 test
jim@prometheus:~$ ls -la test2/test/1/.moo
-rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo


7

tarकुछ इस तरह का उपयोग करें :

mkdir b; tar cpf - myProject/ | tar xpf - -C b/

(परीक्षण नहीं किया गया है। इसे पहले सूखा रन दें या मॉकअप परिदृश्य में प्रयास करें।)


आश्चर्यजनक रूप से अच्छी तरह से काम करता है! मैक पर: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP पाठ फ़ाइल की प्रतिलिपि के साथ पथ-टू-फाइल्स की सूची है
— अलेक्सई

4

पहले mkdir -pपुनरावर्ती मूल पथ निर्माण के साथ गंतव्य फ़ोल्डर बनाने के लिए उपयोग करें। तब सामग्री को गंतव्य फ़ोल्डर में कॉपी करें:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project

3
cp -P a/myProject/.project b

man cpअधिक जानकारी के लिए देखें ।


यह मदद करने के लिए प्रतीत नहीं होता है। यह केवल '.project' को ही b में कॉपी करता है, लेकिन यह 'myProject' को कॉपी नहीं करता है।
— ढबला

3

मैं खोजने के साथ संयोजन में cpio का उपयोग करता हूं। यहाँ स्पष्टीकरण ।

आपके उपयोग के मामले के लिए उदाहरण:

find /a/myProject/.project/ -type f | cpio -p -dumv /b/.

यह कमांड /a/myProject/.project/पथ को संरक्षित करते हुए सभी फ़ाइलों और प्रतियों को ढूँढता है , किसी भी फाइल को समाहित करता है।


1
.project एक फ़ाइल है, dir नहीं!
— ddbug

1

इसके अतिरिक्त सबसे आंतरिक निर्देशिका की प्रतिलिपि को छोड़ने से बचने के लिए विकल्प --parentsजोड़ना भी आवश्यक है-r

$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’

तो मेरे लिए काम करने वाली आज्ञा है

$ cp --parents -r test/1/.moo test2/

0

कृपया ध्यान रखें कि इसमें एक बग दिखाई देता है cp --parents। जब मैंने --parentsसाथ में प्रयोग किया था --preserve=all, कुछ गंतव्य निर्देशिकाओं की तारीख और समय की विशेषताओं को संरक्षित नहीं किया गया था।

निम्न लिंक यह पुष्टि करने के लिए लगता है कि यह एक बग है: बग # 8767: cp: --preserve = सभी माता-पिता के लिए काम नहीं करता है जब - अपरेंट का उपयोग किया जाता है ।

तो ऐसा लगता है जैसे आप --parentsइस तरह के रूप में --preserve=allया साथ का उपयोग करते समय संरक्षित किया जा रहा विशेषताओं पर भरोसा नहीं कर सकते -p।


-3

मैंने कमांड के --parentsसाथ प्रयोग किया cpऔर मेरे साथ पूर्णता का काम किया। अधिक जानकारी के लिए हमेशा मैनुअल का उपयोग करें। धन्यवाद।


3
अन्य 5 उत्तरों में कुछ भी नहीं जोड़ा जाता है।
— हिरण हंटर

उत्तरदाता कृपया ध्यान दें कि .project में .project एक फाइल है, डायरेक्टरी नहीं है। इसलिए उदा। Mkdir -pa / .project का कोई मतलब नहीं है।
— ddbug
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.