कमांड लाइन में फ़ाइलों की एक श्रृंखला की प्रतिलिपि बनाएँ (ZSH / BASH)


13

मेरे पास प्रत्ययों के रूप में लगातार संख्याओं वाली फाइलों की एक सूची है। मैं केवल इन फ़ाइलों की एक श्रृंखला की प्रतिलिपि बनाना चाहूंगा। मैं अपने cp कमांड के हिस्से के रूप में एक सीमा कैसे निर्दिष्ट कर सकता हूं।

$ls
P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG*
P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG*

मैं P1080275.JPG से P1080283.JPG फाइल को कुछ इसी तरह कॉपी करना चाहूंगा:

$cp P10802[75-83].JPG ~/Images/.

क्या इसे करने का कोई तरीका है?

जवाबों:



9

बैश में एक सीमा से अधिक पुनरावृति करने के लिए:

for x in {0..10}; do echo $x; done

अपने मामले में एक ही लागू:

for x in {272..283}; do cp P1080$x.JPG ~/Images; done

यह काम करता है, लेकिन मुझे @glenn जैकमैन का उत्तर बेहतर लगता है क्योंकि यह किसी भी प्रोग्रामिंग कंस्ट्रक्शन का आह्वान नहीं करता है।
अमजीत

4

Zsh, extendedglob विकल्प के साथ है ग्लोबिंग (पैटर्न मिलान) ऑपरेटर।

setopt extendedglob
echo P10802<75-83>.JPG

मौजूदा निर्देशिका में फ़ाइलनाम से मेल खाएगा जो उस पैटर्न से मेल खाता है (सावधान रहें कि P1080275.JPG मेल खाता है लेकिन ऐसा P108020000000075.JPG से होता है)

दूसरे छोर पर, {x ... y} स्ट्रिंग विस्तार संचालक (zsh और bash और ksh93 के हाल के संस्करणों द्वारा समर्थित), x से y तक के तारों का विस्तार करता है, भले ही वर्तमान निर्देशिका में कौन सी फाइलें हों।

cp P10802<75-83>.JPG ~there

मेल खाने वाली फाइलों को कॉपी करेगा, ऐसा होगा

cp P10802{75..83}.JPG ~there

लेकिन यदि P1080281.JPG मौजूद नहीं है तो आपको त्रुटियां मिलेंगी।


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