फ़ोल्डर से फ़ोल्डर के बिना फ़ाइलों की प्रतिलिपि कैसे करें


39

मैं से फाइल और सबफ़ोल्डर कॉपी करने के लिए कोशिश कर रहा हूँ एक के बिना फ़ोल्डर एक ही। उदाहरण के लिए, A फ़ोल्डर में अगला होता है:

| file1.txt   
| file2.txt    
| subfolder1   

अगले आदेश को निष्पादित करने से मुझे गलत परिणाम मिलता है:

sudo cp -r /home/username/A/ /usr/lib/B/

परिणाम है

/usr/lib/B/A/...copied files...

के बजाय..

/usr/lib/B/...copied files...

मैं मूल-फ़ोल्डर के बिना अपेक्षित एक तक कैसे पहुंच सकता हूं

जवाबों:


67

उन्नत सी.पी.

cp -r /home/username/A/. /usr/lib/B/

यह विशेष रूप से बहुत अच्छा है क्योंकि यह कोई फर्क नहीं पड़ता कि क्या लक्ष्य निर्देशिका पहले से मौजूद है।

शेल ग्लोबिंग

यदि निर्देशिका में बहुत अधिक ऑब्जेक्ट नहीं हैं तो आप शेल ग्लोबिंग का उपयोग कर सकते हैं:

mkdir -p /usr/lib/B/
shopt -s dotglob
cp -r /home/username/A/* /usr/lib/B/

rsync

rsync -a /home/username/A/ /usr/lib/B/

/स्रोत पथ के अंत में महत्वपूर्ण है; कोई फर्क नहीं पड़ता कि क्या लक्ष्य निर्देशिका पहले से मौजूद है।

खोज

mkdir -p /usr/lib/B/
find /home/username/A/ -mindepth 1 -maxdepth 1 -exec cp -r -t /usr/lib/B/ {} +

या अगर आपको खाली उपनिर्देशिका की आवश्यकता नहीं है:

find /home/username/A/ -mindepth 1 -type f -exec cp --parents -t /usr/lib/B/ {} +

(बिना mkdir)


पहले वाला ठीक काम करता है! कोई भी विचार क्यों घर / उपयोगकर्ता नाम / ए / * (स्टार-प्रतीक के साथ) का कोई मतलब नहीं है? अंत में डॉट वाले वेरिएंट ने मेरी मदद की, धन्यवाद!
पुषंडपोप २५'१५

@pushandpop A/*कोई मतलब नहीं है लेकिन ऐसी परिस्थितियां हैं जिनमें यह काम नहीं करता है।
हौके लैजिंग

3
shoptहै bashविशिष्ट। के साथ zsh, का उपयोग करें *(D)। साथ ksh93, FIGNORE='@(.|..)'cp -tजीएनयू विशिष्ट है। यह findठीक से काम नहीं करेगा क्योंकि यह दोनों A/और इसकी सामग्री (उपखंड सहित) को कई बार कॉपी करेगा।
स्टीफन चेज़लस

1
आप भी चाहते हैं -maxdepth 1( -mindepthऔर -maxdepthजीएनयू एक्सटेंशन अब कुछ अन्य लोगों द्वारा भी समर्थित हैं। शायद find .../. ! -name . -prune -exec ....)
स्टीफन चेज़लस

@ स्टीफेनचैलेज मुझे लगता है कि कहीं एक टाइपो है। find .../.यहाँ एक त्रुटि का कारण बनता है।
हौके लैजिंग

10

यदि एक GNU सिस्टम पर, इससे man cp:

   -T, --no-target-directory
          treat DEST as a normal file

यह आपको cp -rT /home/username/A/ /usr/lib/B/सही काम करने के लिए लिखने की अनुमति देता है।


यह स्वीकृत उत्तर होना चाहिए, यह शेल ग्लोबिंग या किसी अन्य चीज़ की तुलना में उचित है cp। लेकिन यह सच है कि -Tएक गैर-जीएनयू के साथ काम नहीं करेगा cp
नोजाज

3

बताओ cpनिर्देशिका की सामग्री और निर्देशिका ही नहीं कॉपी करने के लिए:

sudo cp -r /home/username/A/* /usr/lib/B/

धन्यवाद! लेकिन यह कहता है: / usr / lib / B / एक निर्देशिका नहीं है
pushandpop

आप की आवश्यकता होगी shopt -s dotglobअगर वहाँ किसी भी dotfiles हैं काम करने के लिए इस बात के लिए /home/username/A/
टॉकलाउड

1
@pushandpop अच्छी तरह से, हाँ। आपके लक्ष्य में यही लक्ष्य था इसलिए मैंने मान लिया कि यह एक निर्देशिका थी। इसमें फ़ाइलों को कॉपी करने का प्रयास करने से पहले आपको लक्ष्य बनाने की आवश्यकता है।
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.