BASH एक को छोड़कर सभी फाइलों को कॉपी करता है


110

मैं एक डिफ़ॉल्ट के अलावा सभी फाइलों को कॉपी करना चाहूंगा, जिसका नाम Default.png है। ऐसा लगता है कि ऐसा करने के कई तरीके हैं। आपके लिए सबसे प्रभावी क्या लगता है?


आपको उस फ़ाइल को छोड़ने की आवश्यकता क्यों है, क्योंकि इसे कॉपी करने के बाद इसे हटाने का विरोध किया गया है? क्या यह लक्ष्य निर्देशिका में पहले से मौजूद है?
लास वी। कार्लसन

1
हां उसी नाम वाली एक फ़ाइल पहले से ही लक्ष्य dir में रह रही है।
जो कैनट्टी

@ LasseV.Karlsen: या आप इसे कॉपी करने के समय को बचाना चाहते हैं, अगर यह एक बड़ी फ़ाइल है। मुझे इसमें दिलचस्पी है लेकिन एक फ़ाइल के बजाय एक निर्देशिका को छोड़कर।
निकाना रेक्लाविक्स

जवाबों:


54

सरल, यदि src/केवल फ़ाइलें शामिल हैं:

find src/ ! -name Default.png -exec cp -t dest/ {} +

यदि src/उप-निर्देशिकाएं हैं, तो यह उन्हें छोड़ देता है, लेकिन उनके अंदर फ़ाइलों की प्रतिलिपि बनाता है:

find src/ -type f ! -name Default.png -exec cp -t dest/ {} +

यदि src/उप-निर्देशिकाएं हैं, तो यह उन में पुनरावृत्ति नहीं करता है:

find src/ -type f -maxdepth 1 ! -name Default.png -exec cp -t dest/ {} +

5
यह मेरे लिए सबसे अच्छा है क्योंकि यह दिखाई देगा कि ओएस एक्स जहाज बिना ग्लोब सक्षम है।
जो कैनट्टी

6
@ मोम \;प्रति फ़ाइल एक बार कमांड निष्पादित करता है। +एक बार कमांड चलाता है और एक ही बार में सभी फ़ाइल नामों को पास करता है (कमांड लाइन की लंबाई सीमा के अधीन)। +सामान्य रूप से थोड़ा अधिक कुशल है।
जॉन कुगेलमैन

149

निम्नानुसार होना चाहिए:

cp -r !(Default.png) /dest

यदि वर्तमान फ़ोल्डर में नेस्टेड फ़ोल्डर में कॉपी किया जाता है (नीचे मामले में उदाहरण कहा जाता है) तो आपको उस निर्देशिका को भी छोड़ना होगा:

cp -r !(Default.png|example) /example

17
यह -Bash:!: ईवेंट नहीं मिला
जो Cannatti

क्या आप फ़ाइलों को उस फ़ोल्डर में कॉपी कर रहे हैं जिसे फ़ोल्डर में आपके द्वारा कॉपी किया गया है?
जॉन

47
यह shopt -s extglobकाम करने की आवश्यकता है, अगर यह अक्षम हो गया है।
बैरी केली

5
ऐसा लगता है कि ओएस एक्स को shopt -s extglob@BarryKelly द्वारा वर्णित के रूप में उपयोग करने की आवश्यकता है । इसके साथ, यह पूरी तरह से काम करता है।
कैट

बैश पर साल और के बारे में पता नहीं था !()... सुंदर! उन है कि --like महसूस me-- के लिए यह अध्ययन / समीक्षा करने का समय है बैश , यहाँ प्रासंगिक इस प्रश्न / उत्तर से संबंधित लिंक कर रहे हैं: shopt / extglob और पैटर्न
ब्रांट

73

rsync लंबे समय से मेरा cp / scp प्रतिस्थापन रहा है:

rsync -av from/ to/ --exclude=Default.png

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose               increase verbosity

यदि मैं दो अलग-अलग फ़ाइलों को बाहर करना चाहता हूं, तो मैं इसका उपयोग कैसे करूं?
पुलकित बंसल

एकाधिक --exclude = तर्क समर्थित हैं। और -rअगर आप निर्देशिकाओं को सिंक्रनाइज़ कर रहे हैं तो arg को मत भूलना
Rian Sanderson

5

मैं अभी करूँगा:

cp srcdir/* destdir/ ; rm destdir/Default.png

जब तक फाइलें बड़ी न हों। अन्यथा उदा

find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/

1
पहला आदेश वह नहीं है जो ओपी ने मांगा था। यदि Default.pngदो निर्देशिका में मौजूद है, यह एक में बदल देगा destdirमें एक के बाद srcdir, फिर कॉपी किया हटाना Default.png। इसके बजाय, ओपी को Default.pngपहले से ही मौजूद रखना चाहता है destdir
स्नोफ्रॉग

2
कैसे के बारे में default.png पहले से ही destdir में मौजूद है? आपका विलेयूनन काम नहीं करेगा।
इमान मोहम्मदी

2

यह नोड मॉड्यूल को छोड़कर सब कुछ कॉपी करने के लिए बहुत अच्छा काम करता है :) आनंद लें और ऊपर दिए गए उत्तर के लिए धन्यवाद मैंने अभी इसमें जोड़ा है। CP की तुलना में Rsync मेरी राय में बेहतर है क्योंकि आप बिना मांगे प्रगति पट्टी देख सकते हैं।

   rsync -av fromDirectory/ ToDirectory/ --exclude=node_modules



-2

रेगेक्स के साथ शेल के विस्तार पैरामीटर का उपयोग करें

cp /<path>/[^not_to_copy_file]* .

Not_to_copy_file को छोड़कर सब कुछ कॉपी किया जाएगा

- अगर इसमें कुछ गलत है। कृपया निर्दिष्ट करें !


1
एसओ में आपका स्वागत है। दुर्भाग्य से आपका उत्तर सही नहीं है। ब्रैकेट एक्सप्रेशन ( [...]) में मिलान करने के लिए वर्णों का एक सेट होता है, जबकि एक अग्रणी ^सूचीबद्ध पात्रों के पूरक के मैच का कारण होगा। निम्नलिखित उदाहरण में, न तो फ़ाइल को सूचीबद्ध किया जाएगा: touch not_to_copy_file to_copy_file ; ls [^not_to_copy_file]*क्योंकि निम्न वर्णों में से किसी के साथ शुरू होने वाले सभी फ़ाइलनामों को बाहर रखा जाएगा _cefilnopty:।
rtx13
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.