मैं एक डिफ़ॉल्ट के अलावा सभी फाइलों को कॉपी करना चाहूंगा, जिसका नाम Default.png है। ऐसा लगता है कि ऐसा करने के कई तरीके हैं। आपके लिए सबसे प्रभावी क्या लगता है?
मैं एक डिफ़ॉल्ट के अलावा सभी फाइलों को कॉपी करना चाहूंगा, जिसका नाम Default.png है। ऐसा लगता है कि ऐसा करने के कई तरीके हैं। आपके लिए सबसे प्रभावी क्या लगता है?
जवाबों:
सरल, यदि 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/ {} +
\;
प्रति फ़ाइल एक बार कमांड निष्पादित करता है। +
एक बार कमांड चलाता है और एक ही बार में सभी फ़ाइल नामों को पास करता है (कमांड लाइन की लंबाई सीमा के अधीन)। +
सामान्य रूप से थोड़ा अधिक कुशल है।
निम्नानुसार होना चाहिए:
cp -r !(Default.png) /dest
यदि वर्तमान फ़ोल्डर में नेस्टेड फ़ोल्डर में कॉपी किया जाता है (नीचे मामले में उदाहरण कहा जाता है) तो आपको उस निर्देशिका को भी छोड़ना होगा:
cp -r !(Default.png|example) /example
shopt -s extglob
काम करने की आवश्यकता है, अगर यह अक्षम हो गया है।
shopt -s extglob
@BarryKelly द्वारा वर्णित के रूप में उपयोग करने की आवश्यकता है । इसके साथ, यह पूरी तरह से काम करता है।
!()
... सुंदर! उन है कि --like महसूस me-- के लिए यह अध्ययन / समीक्षा करने का समय है बैश , यहाँ प्रासंगिक इस प्रश्न / उत्तर से संबंधित लिंक कर रहे हैं: shopt / extglob और पैटर्न ।
rsync लंबे समय से मेरा cp / scp प्रतिस्थापन रहा है:
rsync -av from/ to/ --exclude=Default.png
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose increase verbosity
-r
अगर आप निर्देशिकाओं को सिंक्रनाइज़ कर रहे हैं तो arg को मत भूलना
मैं अभी करूँगा:
cp srcdir/* destdir/ ; rm destdir/Default.png
जब तक फाइलें बड़ी न हों। अन्यथा उदा
find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/
Default.png
दो निर्देशिका में मौजूद है, यह एक में बदल देगा destdir
में एक के बाद srcdir
, फिर कॉपी किया हटाना Default.png
। इसके बजाय, ओपी को Default.png
पहले से ही मौजूद रखना चाहता है destdir
।
यह नोड मॉड्यूल को छोड़कर सब कुछ कॉपी करने के लिए बहुत अच्छा काम करता है :) आनंद लें और ऊपर दिए गए उत्तर के लिए धन्यवाद मैंने अभी इसमें जोड़ा है। CP की तुलना में Rsync मेरी राय में बेहतर है क्योंकि आप बिना मांगे प्रगति पट्टी देख सकते हैं।
rsync -av fromDirectory/ ToDirectory/ --exclude=node_modules
cp `ls | grep -v Default.png` destdir
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude
रेगेक्स के साथ शेल के विस्तार पैरामीटर का उपयोग करें
cp /<path>/[^not_to_copy_file]* .
Not_to_copy_file को छोड़कर सब कुछ कॉपी किया जाएगा
- अगर इसमें कुछ गलत है। कृपया निर्दिष्ट करें !
[...]
) में मिलान करने के लिए वर्णों का एक सेट होता है, जबकि एक अग्रणी ^
सूचीबद्ध पात्रों के पूरक के मैच का कारण होगा। निम्नलिखित उदाहरण में, न तो फ़ाइल को सूचीबद्ध किया जाएगा: touch not_to_copy_file to_copy_file ; ls [^not_to_copy_file]*
क्योंकि निम्न वर्णों में से किसी के साथ शुरू होने वाले सभी फ़ाइलनामों को बाहर रखा जाएगा _cefilnopty
:।