मौजूदा निर्देशिका में एक निर्देशिका से फ़ाइलों की प्रतिलिपि बनाएँ


248

बाश में मुझे ऐसा करने की आवश्यकता है:

  1. एक निर्देशिका में सभी फ़ाइलों को ले लो

  2. उन्हें एक मौजूदा निर्देशिका में कॉपी करें

मैं यह कैसे करु? मैंने कोशिश की cp -r t1 t2(दोनों t1 और t2 मौजूदा निर्देशिका हैं, t1 में फ़ाइलें हैं), लेकिन इसने t2 के अंदर t1 नामक एक निर्देशिका बनाई है, मैं नहीं चाहता कि, मुझे t2 के अंदर सीधे जाने के लिए t1 में फ़ाइलों की आवश्यकता है। मैं यह कैसे करु?


11
इसे बंद क्यों किया गया? यह मनमाना है अगर एक बाश कमांड एक अंतर्निहित या बाहरी कमांड है (जैसे कि प्रिंटफ अधिकांश प्रणालियों पर दोनों के रूप में मौजूद है), इसलिए cpप्रश्नों को अच्छी तरह से bashप्रश्नों के रूप में देखा जा सकता है , जो एक प्रोग्रामिंग भाषा है। मैंने कभी ऐसा नहीं देखा कि पायथन का सवाल है कि फाइल कॉपी को बंद किया जाए।
सिरो सेंटिल्ली 郝海东 i iro 法轮功 ''


मैं बैश शेल कॉपी कमांड के सिंटैक्स के बारे में एक अनुस्मारक की तलाश में आया था, और मुझे यह रिपोर्ट करते हुए खुशी हो रही है कि ये आदेश मेरे विंडोज इंस्टॉलेशन पर अंतर्निहित NTFS फाइल सिस्टम के खिलाफ काम करने के लिए भी प्रतीत होते हैं।
डेविड ए। ग्रे

जवाबों:


396

आप क्या चाहते हैं:

cp -R t1/. t2/

अंत में स्थित डॉट इसे वर्तमान निर्देशिका की सामग्री को कॉपी करने के लिए कहता है, न कि निर्देशिका को। इस पद्धति में छिपी हुई फ़ाइलें और फ़ोल्डर्स भी शामिल हैं।


2
मैं वास्तव में इस वाक्यविन्यास को पसंद करता हूं, लेकिन किसी कारण से यह काम नहीं करता है mv। क्या किसी को पता है क्यों?
मार्टिन वॉन विटिच

2
गजब का। यह कहां प्रलेखित है? क्या यह POSIX या एक्सटेंशन है?
सिरो सांटिल्ली 14 iro i '' '

9
@CiroSantilli 六四 事件 包 卓 轩 you copy यदि आप एक निर्देशिका की प्रतिलिपि बनाते हैं, तो cp एक निर्देशिका बनाएगा और उसमें सभी फाइलों को कॉपी करेगा। यदि आप "।" नाम के प्रिटेंड फ़ोल्डर का उपयोग करते हैं, जो कि इसे धारण करने वाली निर्देशिका के समान है, तो प्रतिलिपि इस तरह से व्यवहार करती है। मान लीजिए कि t1 में "फ़ाइल" नामक एक फ़ाइल है। cp "cp t1 /./ file t2 /./" के बराबर ऑपरेशन करेगा। यह फ़ोल्डर "" की प्रतिलिपि बना रहा है, लेकिन फाइलों को t2 के "" में कॉपी कर रहा है। फ़ोल्डर स्ट्रिप्स "/।" क्योंकि "t2 /./" "t2 /" के समान है। तकनीकी रूप से, इसका मतलब है कि यह POSIX व्यवहार में बनाया गया है ... लेकिन शायद उस तरीके से नहीं जिस तरह आप उम्मीद कर रहे होंगे!
हड़ताली

35

यदि आप वर्तमान निर्देशिका में एक निर्देशिका से कुछ कॉपी करना चाहते हैं , तो यह करें:

cp dir1/* .

यह मानता है कि आप छिपी हुई फ़ाइलों को कॉपी करने की कोशिश नहीं कर रहे हैं।


20
छिपी हुई फाइलें याद आती हैं।
सिरो सेंटिल्ली 11 冠状 iro 事件 ''

1
बड़ी संख्या में फ़ाइलों के लिए भी विफल रहता है (क्योंकि '*' असीम रूप से कई फ़ाइलों का विस्तार नहीं कर सकता है ..) y
moritzsiplefer

32
cp dir1/* dir2

या यदि आपके पास dir1 के अंदर निर्देशिका है जिसे आप भी कॉपी करना चाहेंगे

cp -r dir1/* dir2

3
इस बात पर निर्भर करता है कि आपका शेल कैसे कॉन्फ़िगर किया गया है, आपको शायद "dir1 / *" के बजाय "dir1 / * dir1 /.*" का उपयोग करना होगा यदि आप छिपी हुई फ़ाइलों को भी पकड़ना चाहते हैं।
ssokolow

2
नकल dir1/.*करना एक अच्छा विचार नहीं है, क्योंकि यह dir1 / .. की प्रतिलिपि बनाता है (यानी जिस निर्देशिका को आप वास्तव में कॉपी करने की कोशिश कर रहे हैं, उसके माता-पिता)। यह dir1 / को भी कॉपी करता है। जो ठीक है, सिवाय इसके कि यह पहले से ही (ज्यादातर) कॉपी किया गया है, इसलिए आप दो बार काम कर रहे हैं।
गॉर्डन डेविसन

1
आप dir1/.*उस निर्देशिका में cd-ing द्वारा / छिपी हुई फ़ाइलों की समस्या के आसपास प्राप्त कर सकते हैं जिसे आप से कॉपी करना चाहते हैं, और फिर इसका जिक्र करते हैं .। तो, यदि आप एक मौजूदा निर्देशिका में एक निर्देशिका से छिपा फ़ाइलों सहित सभी फाइलों को कॉपी करना चाहते हैं, आप कर सकते हैं: cd [source dir], cp . [path to destination dir, with no trailing slash]
रॉब

8

मान लिया जाए कि t1 इसमें फ़ाइलों के साथ फ़ोल्डर है, और t2 खाली निर्देशिका है। आप जो चाहते हैं वह कुछ इस तरह है:

sudo cp -R t1/* t2/

ध्यान में रखें, पहले उदाहरण के लिए, t1 और t2 को पूर्ण पथ या रिश्तेदार पथ (जहाँ आप हैं) के आधार पर होना चाहिए। यदि आप चाहें, तो आप खाली फ़ोल्डर (t2) पर नेविगेट कर सकते हैं और यह कर सकते हैं:

sudo cp -R t1/* ./

या आप फ़ाइलों के साथ फ़ोल्डर में नेविगेट कर सकते हैं (t1) और यह करें:

sudo cp -R ./* t2/

नोट: * साइन (या वाइल्डकार्ड) सभी फाइलों और फ़ोल्डरों के लिए है। -R ध्वज का अर्थ होता है पुनरावर्ती (हर चीज के अंदर सब कुछ)।


2
cp -R t1/ t2

स्रोत निर्देशिका पर अनुगामी स्लैश शब्दार्थ को थोड़ा बदल देता है, इसलिए यह सामग्री को कॉपी करता है, लेकिन निर्देशिका को ही नहीं। यह ग्लोबिंग और अदृश्य फ़ाइलों के साथ समस्याओं से भी बचता है, जो बर्ट्रेंड के उत्तर में है ( t1/*अदृश्य फ़ाइलों की प्रतिलिपि बनाकर, प्रतिलिपि बनाकर `t1 / * t1 /.* 'प्रतियां t1 /। और t1 / .., जो नहीं चाहिए)।


आपका समाधान काम नहीं करता है, कम से कम मेरे इंस्टॉलेशन पर नहीं (ubuntu 12.10) $ mkdir t1 $ mkdir t2 $ touch t1/one $ touch t1/two $ touch t1/.three $ cp -R t1/ t2 $ ls t2/ t1 (क्षमा करें टिप्पणियों में कोई कोडफॉर्मेट नहीं है, pastebin.com/yszSxV6G पर पठनीय संस्करण )
zpon

2

कुछ विवरणों के आधार पर आपको ऐसा कुछ करने की आवश्यकता हो सकती है:

r=$(pwd)
case "$TARG" in
    /*) p=$r;;
    *) p="";;
    esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"

... यह मूल रूप से एसआरसी निर्देशिका में बदल जाता है और इसे लक्ष्य पर कॉपी कर देता है, फिर आप जो भी शुरू करते हैं, वहां वापस आ जाते हैं।

अतिरिक्त उपद्रव सापेक्ष या निरपेक्ष लक्ष्यों को संभालना है।

(यह cpकमांड के सूक्ष्म शब्दार्थों पर ही निर्भर नहीं करता है ... इस बारे में कि यह कैसे या बिना अनुगामी / के बिना स्रोत विनिर्देशों को संभालता है ... क्योंकि मुझे यकीन नहीं है कि वे स्थिर हैं, पोर्टेबल हैं, और बस जीएनयू cpऔर मैं से परे विश्वसनीय हैं। पता नहीं कि वे भविष्य में ऐसा करना जारी रखेंगे)।


1

कुछ निर्देशिका के अंदर, इसका पूरा उपयोग किया जाएगा क्योंकि यह कुछ निर्देशिका के अंदर "फ़ोल्डर 1" से नई निर्देशिका "फ़ोल्डर 2" तक सभी सामग्रियों को कॉपी करता है।

$ (pwd) को वर्तमान निर्देशिका के लिए रास्ता मिलेगा।

फ़ोल्डर 1 के बाद सभी सामग्री प्राप्त करने के लिए फ़ोल्डर 1 के बाद डॉट (।) को नोटिस करें

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