2015-04-03 5 views
8

मैं एक्सटेंशन jpg या txt से मेल खाने वाली सभी फ़ाइलों पर लूप करना चाहता हूं। मैं का उपयोग करें:फ़ाइल नाम ग्लोब के पास कोई मिलान नहीं होने पर कुछ भी मिलान कैसे करें

for file in myDir/*.{jpg,txt} 
do 
    echo "$file" 
done 

समस्या: निर्देशिका सभी में कोई jpg फ़ाइल हैं, पाश उत्पादन myDir/*.jpg के साथ एक यात्रा करना होगा। मैं * को एक मनमानी फ़ाइल द्वारा प्रतिस्थापित किया जाएगा (और यदि कोई फ़ाइल मौजूद नहीं है तो इसे विस्तारित नहीं किया जा सकता है)। मैं अवांछित पुनरावृत्ति से कैसे बच सकता हूं?

shopt -s nullglob 

से man bash: इस अवांछित यात्रा से बचने के लिए

+0

एक पैटर्न कोई मेल नहीं है, तो डिफ़ॉल्ट/POSIX व्यवहार बल्कि अनदेखी या पैटर्न को हटाने की तुलना में एक शाब्दिक स्ट्रिंग के रूप में पैटर्न के इलाज के लिए, है। – chepner

+0

प्रश्न से संबंधित नहीं है, लेकिन ध्यान दें कि ब्रेसिज़ पैटर्न का हिस्सा नहीं हैं। वे संबंधित स्ट्रिंग्स का एक सेट उत्पन्न करने के लिए 'bash' shorthand हैं, और जैसे पैटर्न मिलान शुरू होने से पहले स्ट्रिंग' myDir/*। Jpg myDir/*। Txt' में विस्तारित होते हैं। – chepner

उत्तर

12

उपयोग

nullglob: सेट, बैश पैटर्न जो कोई भी फ़ाइलें से मेल खाते हैं (ऊपर पथ विस्तार देखें) एक करने के लिए विस्तार करने के लिए अनुमति देता है खुद की बजाय नल स्ट्रिंग।

देखें: help shopt और shopt

संबंधित मुद्दे