2010-09-17 16 views
9

के साथ शुरू मैं निम्नलिखित jpeg-फाइलों के साथ एक फ़ोल्डर है कहते हैं कि चलो फ़ाइलों पर कार्य करते हैं:बैश फ़ाइल नाम ग्लोबिंग - राजधानी

adfjhu.jpg Afgjo.jpg 
Bdfji.jpg bkdfjhru.jpg 
Cdfgj.jpg cfgir.jpg 
Ddfgjr.jpg dfgjrr.jpg 

मैं कैसे फ़ाइलों को निकालना या पूंजी के साथ शुरू होता है सूचीबद्ध करते हैं?

इसे find, grep और xargs के संयोजन के साथ हल किया जा सकता है।

लेकिन बैश में सामान्य फ़ाइल-ग्लोबिंग/पैटर्न मिलान के साथ यह संभव है?

cmd नीचे इस तथ्य के कारण काम नहीं करता है कि (जहां तक ​​मैं कह सकता हूं) LANG en_US और collation order पर सेट है।

$ ls [A-Z]*.jpg 
Afgjo.jpg Bdfji.jpg bkdfjhru.jpg Cdfgj.jpg cfgir.jpg Ddfgjr.jpg dfgjrr.jpg 

काम करता है

$ ls +(A|B|C|D)*.jpg 
Afgjo.jpg Bdfji.jpg Cdfgj.jpg Ddfgjr.jpg 

इस तरह की लेकिन मैं सभी पात्रों एक सामान्य समाधान के लिए एक-जेड के लिए ऐसा करना चाहते हैं नहीं है!

तो क्या यह संभव है?

चियर्स // फ्रेड्रिक

+1

दिलचस्प बात यह LANG के साथ अपने लिनक्स बॉक्स "en_US.UTF-8", करने के लिए सेट पर "ls [AZ] *" सभी छोटे अक्षर वाले के साथ-साथ देता है, लेकिन LANG के साथ मेरे मैकिंतोश पर "en_US.UTF-8" पर सेट किया गया है, "एलएस [एजेड] *" केवल अप्पर केस नाम देता है। न तो बॉक्स पर LC_COLLATE सेट है, इसलिए मुझे नहीं पता कि अंतर क्या है। –

उत्तर

5

आप C को अपने स्थान निर्धारित करना चाहिए (या POSIX) लोकेल।

$ LC_ALL=C ls [A-Z]*.jpg 

या

$ LC_ALL=C ls [[:upper:]]*.jpg 

अधिक जानकारी के लिए पढ़ें: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

+0

अरग! मैंने कोशिश की कि मेरी पोस्ट से पहले एक लेकिन 'एलसी_ALL = सी एलएस [ए-जेड] *। Jpg' मेरे लिए सभी फाइलें सूचीबद्ध करता है! पॉज़िक्स चीज़ी [: ऊपरी:] हालांकि काम करता है! धन्यवाद! ;-) –

2

उपयोग grep:

ls | grep -e ^[A-Z] 

आप कर चाहते हैं और अधिक एक for पाश का उपयोग करें:

for i in $(ls | grep -e ^[A-Z]); do echo $i ;done 
5

एक चरित्र वर्ग के साथ एक ब्रैकेट अभिव्यक्ति का उपयोग करें:

ls -l [[:upper:]]* 

चरित्र वर्गों की सूची के लिए man 7 regex देखें और अन्य जानकारी।

कि पृष्ठ से:

एक ब्रैकेट अभिव्यक्ति के भीतर, में संलग्न एक चरित्र वर्ग का नाम '[:' और ':]' उस वर्ग से संबंधित सभी पात्रों की सूची के लिए खड़ा है। स्टैंडर्ड चरित्र वर्ग नाम हैं:

alnum digit punct 
alpha graph space 
blank lower upper 
cntrl print xdigit 
संबंधित मुद्दे