एकाधिक एक्सटेंशन वाली फ़ाइलों की प्रतिलिपि बनाना


22

मैं एक गंतव्य निर्देशिका के लिए कई एक्सटेंशन वाली फ़ाइलों को कॉपी करना चाहूंगा।

उदाहरण के लिए, मैं काम करने वाली निर्देशिका में सभी .txt फाइलों को एक निर्देशिका में कॉपी करने के लिए निम्नलिखित कमांड का उपयोग कर सकता हूं destination:

cp -v *.txt destination/

और मैं काम कर रहे निर्देशिका में सभी .png निर्देशिका की प्रतिलिपि बनाने के लिए निम्नलिखित का उपयोग कर सकता हूं destination:

cp -v *.png destination/

लेकिन इसे अलग-अलग कमांड के रूप में टाइप करने में समय लगता है (यहां तक ​​कि कमांड इतिहास के उपयोग के साथ)। तो, वहाँ किसी भी तरह से है कि मैं बता सकता है cpया तो पैटर्न के साथ फ़ाइलों की प्रतिलिपि बनाने *.txt या पैटर्न *.pngके लिए destination? को निर्देश की तरह - आदर्श रूप में, मैं और अधिक से अधिक दो पैटर्न निर्दिष्ट करने के लिए सक्षम होने के लिए चाहते हैं cpसब कॉपी करने के लिए *.txt या *.png या *.jpg करने के लिए फ़ाइलों destinationउदाहरण के लिए,।

मुझे यकीन है कि शेल स्क्रिप्ट का उपयोग करके यह सब संभव है - मैं bashउदाहरण के लिए उपयोग कर रहा हूं - लेकिन क्या यह केवल सांत्वना से अधिक सरलता से पूरा करने का कोई तरीका है? क्या मैं किसी तरह इसे करने के लिए ब्रेस विस्तार का उपयोग कर सकता हूं?

मुझे पता है कि कुछ निर्दिष्ट पैटर्नों के मिलान के अलावा कार्यशील निर्देशिका में सभी फ़ाइलों की प्रतिलिपि बनाना संभव है , लेकिन चूंकि मेरी कार्यशील निर्देशिका में अधिक फ़ाइल एक्सटेंशन हैं , जिन्हें मैं उन चीज़ों की तुलना में कॉपी नहीं करना चाहता , जो एक दर्द होगा।

इस पर आपका क्या विचार है?


10
cp -v *.txt *.png destination/?
इरूवर

जवाबों:


56

ब्रेस विस्तार से काम हो जाएगा। man bashऔर के लिए खोज Brace Expansion

cp *.{txt,jpg,png} destination/

संपादित करें:

ओपी के अनुरोध को ध्यान में रखते हुए, ऊपर दिए गए आदेश में क्रिया विकल्प गायब था:

cp -v *.{txt,jpg,png} destination/

2
क्या मैं विंडोज पर ऐसा कर सकता हूं?
सर्गियोल

यदि मैं करता हूं cp data/images/*.{jpg,jpeg,png,mp4} destination/और एक mp4फ़ाइल मौजूद नहीं है, तो मुझे एक No such file or directoryत्रुटि मिलती है जो स्क्रिप्ट को तोड़ती है। क्या मैं कई एक्सटेंशनों को किसी भी छूटे हुए फॉर्मेट को आसानी से संभाल सकता हूं?
ब्राडग्रेन

1
@BradGreens आपको टिप्पणियों में यहाँ पूछने के बजाय वास्तव में एक नया प्रश्न पोस्ट करना चाहिए। आपके प्रश्न का उत्तर पहले से ही हो सकता है। एक नया प्रश्न पोस्ट करने से न केवल आपको उत्तर मिलेगा, बल्कि इसके बाद अन्य लोगों द्वारा खोजा जा सकेगा, जिन्हें उसी सहायता की आवश्यकता है।
टिमोथी मार्टिन

0
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

यह काम कर रहा है!

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