बैश शेल: प्रकार की सभी फ़ाइलों की सूची .png या .PNG?


14

बैश स्क्रिप्ट में, मैं कैसे कह सकता हूँ 'सभी प्रकारों की .png या .PNG'?

मैं कोशिश कर रहा हूँ :

for i in (`ls *.PNG` && `ls *.png`)

लेकिन एक सिंटैक्स त्रुटि हो रही है।

जवाबों:


18

यदि आप सभी संभव संयोजन चाहते हैं, तो उपयोग करें:

for i in *.[Pp][Nn][Gg]; do

या

shopt -s nocaseglob
for i in *.png; do

यद्यपि वह आपकी स्क्रिप्ट के सभी शेल ग्लब्स (यानी वाइल्डकार्ड फ़ाइल मैच) केस को असंवेदनशील बना देगा, जब तक आप उसे नहीं चलाते shopt -u nocaseglob

यदि आप वास्तव में सिर्फ .PNG और .png चाहते हैं (और, उदाहरण के लिए, .PnG या .pnG), तो या तो।

shopt -s nullglob
for i in *.png *.PNG; do

या

for i in *.png *.PNG; do
    [[ -e "$i" ]] || continue

... नलग्लोब या अस्तित्व की जांच का कारण यह है कि यदि आपके पास केवल लोअरकेस या केवल अपरकेस एक्सटेंशन हैं, तो यह फ़ाइलों की सूची में बेजोड़ पैटर्न को शामिल करेगा, जिससे लूप के शरीर में त्रुटि हो सकती है। Nocaseglob के साथ के रूप में, आप बाद में nullglob शेल विकल्प को बंद करना चाह सकते हैं (हालांकि मेरे अनुभव में nullglob अक्सर अच्छा होता है, खासकर एक स्क्रिप्ट में)। वास्तव में, मैं इसके बजाय इस तरह के सभी फ़ाइल मैचों के लिए या तो nocaseglob या अस्तित्व की जांच का उपयोग करने के लिए एक अच्छा विचार मानता हूं, बस अगर कोई मैच न हो।


5
for i in *.{png,PNG}
ग्लेन जैकमैन

@glenn: यह भी काम करेगा (`* .png * .PNG के बराबर), हालांकि आपको अभी भी नलग्लोब या अस्तित्व की जांच की आवश्यकता है।
गॉर्डन डेविसन

5

आप कुछ वन-लाइनर भी आज़मा सकते हैं जैसे कि

खोजो। -नाम "* .पिंग" -exec ...।

या

खोजो। -नाम "* .png" | xargs…।

संपादित करें
@ पुनरावृत्ति के बारे में @ याब की टिप्पणी भी देखें।


1
हालाँकि, डिफ़ॉल्ट पुनरावर्ती द्वारा पाया जाता है, इसलिए उसी परिणाम को प्राप्त करने के लिए प्रश्न पूछता है, आपको करना होगा find -maxdepth 1 -iname "*.png"
Yab

@ यब, आप बिलकुल सही हैं। मैंने इस पहलू की अनदेखी की।
एलेन पैनेटियर

1

ls यहाँ लगभग बेकार है लेकिन यहाँ रिकॉर्ड के लिए आपके प्रयास के करीब एक वाक्यविन्यास है:

for i in $(ls *.PNG ; ls *.png)

टिप्पणियाँ:

  • मैं मान रहा हूं कि आप अपरकेस और लोअरकेस चित्र दोनों चाहते हैं। && सेपरेटर का अर्थ होगा कि पीएनजी फाइलें मौजूद होने पर ही पीएनजी फाइलों को प्रोसेस करना होगा, जो संभवत: बहुत मायने नहीं रखता।
  • यदि कोई फ़ाइल या तो पैटर्न के साथ नहीं मिली है तो आपको त्रुटि संदेश प्रदर्शित होंगे।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.