सबसे पहले, फ़ाइलों grep
की सामग्री के माध्यम से खोज करता है, यह फ़ाइल नामों की खोज नहीं करेगा। उसके लिए आपको चाहिए find
। इसमें फ़ाइल नाम की लंबाई निर्धारित करने का विकल्प नहीं है लेकिन आप जो चाहते हैं उसे प्राप्त करने के लिए इसे आउटपुट कर सकते हैं। यहां कुछ उदाहरण दिए गए हैं, जिन्हें मैं निम्नलिखित फ़ाइलों वाली निर्देशिका में चलाता हूं:
$ tree
.
├── a
├── ab
├── abc
├── abcd
└── dir
├── a
├── ab
├── abc
└── abcd
इस निर्देशिका में फ़ाइलों के लिए खोज रिटर्न:
$ find . -type f | sort
./a
./ab
./abc
./abcd
./dir/a
./dir/ab
./dir/abc
./dir/abcd
इसलिए, X की लंबाई वाली फ़ाइलों को खोजने के लिए, हमें पथ को हटाने और अंतिम के बाद केवल वर्णों को मिलान करने की आवश्यकता होगी /
:
$ find . -type f | grep -P '/.{3}$'
sed
आदेश सिर्फ निकाल देता है ./
। -P
झंडा पर्ल कम्पैटिबल रेग्युलर एक्सप्रेशंस जो के लिए आवश्यक हैं सक्रिय हो जाता है {n}
जो एक PCRE बात और है $
का मतलब है "स्ट्रिंग के अंत से मेल खाते हैं।"
आप भी बस ऐसा कर सकते हैं:
find . -type f | grep -P '/...$'
लंबाई 15 के फ़ाइलनाम से मिलान करने के लिए 15 डॉट्स टाइप करने वाली छोटी संख्या के लिए यह ठीक नहीं है।
अंत में, यदि आप एक्सटेंशन को अनदेखा करना चाहते हैं और केवल फ़ाइल के नाम से मेल खाना चाहते हैं, तो यह करें (जैसा कि @slm ने सुझाव दिया है):
find . -type f | grep -P '/.{1}\.'
हालाँकि, यह भी फ़ाइलों की तरह मिल जाएगा a.bo.go
। यह बेहतर है यदि आपके फ़ाइलनाम में एक से अधिक हो सकते हैं .
:
find . -type f | grep -P '/.{1}\.[^.]+$'
नोट: ऊपर दिए गए उपाय से आपको लगता है कि आपके पास अपेक्षाकृत समझदार फाइलनाम है जिसमें नई लाइन वर्ण आदि नहीं हैं। यह भी गणना में फिलानों में स्थान की अनदेखी नहीं करेगा जब आप जो चाहते हैं वह लंबाई नहीं हो सकती है। यदि इनमें से कोई एक समस्या है, तो मुझे बताएं और मैं अपने उत्तर को अपडेट करूंगा।
a.go
लंबाई का एक फ़ाइल नाम है। लंबाईa
का एक फ़ाइल नाम है। यह यूनिक्स है, न कि डॉस जहां नाम और विस्तार अलग थे और एक निहित.
हमेशा फ़ाइलनाम का हिस्सा था।