इस मामले में जीएनयू find
आपको एक ही बार में इन सभी कामों को करने देता है, पाइप को खत्म करना और संभावित रूप से परेशान करना ls
:
find . -maxdepth 1 -name '[^.]*' \
-regextype posix-extended -regex "MYPATTERN" \
-printf 'SOMEPREFIX %f SOMESUFFIX\n'
( find
निश्चित रूप से अन्य कमांड के आउटपुट को मनमाने ढंग से संशोधित करने का एक अच्छा तरीका नहीं है!)
कुछ नोट:
-maxdepth 1
और -name [^.]*
नाम मिलान कार्य को मैदान ls
(या ls .
) के समान बनाएं । आप किसी भी शैल-शैली के ग्लोब का उपयोग कर सकते हैं, लेकिन ध्यान दें कि "*" एक अग्रणी से मेल खाएगा "।" एक नाम † के विपरीतbash
, तो [^.]*
इसका मतलब कुछ भी है कि एक अग्रणी नहीं है "।"
- MYPATTERN एक उचित POSIX ERE है (डिफ़ॉल्ट प्रकार Emacs है, यहां देखें ), लेकिन यह पूरे फ़ाइल नाम से मेल खाना चाहिए इसलिए
.*thing.*
केवल इसके बजाय कुछ का उपयोग करेंthing
- आप शायद सिर्फ एक का उपयोग कर सकते हैं
-name
-regex
दोनों में से बजाय / (जैसे -regex "[^।]। MYPATTERN। "
-printf
बहुत सारी चीजों का समर्थन करता है ,%n
अनलंकृत फ़ाइल या निर्देशिका का नाम है
† ( find
हालांकि यह आपके संस्करण पर निर्भर कर सकता है , अपने मैन पेज के "मानक कॉन्फ्रेंस" अनुभाग की जांच करें)
आवश्यक कोई बाहरी कार्यक्रमों के साथ एक संभावित विकल्प के रूप में bash
है compgen
जो अन्य बातों के अलावा, एक करने के लिए globs, बराबर का विस्तार ls
नहीं विकल्पों के साथ:
compgen -P "someprefix>" -S "<somesuffix" -G "pattern"
यह व्हॉट्सएप के साथ नए नाम सहित फिल्नाम को संभालता है। compgen -G "*"
एक सादे के रूप में एक ही आउटपुट प्रदान करना चाहिए ls
(लेकिन ध्यान दें कि ls *
पूरी तरह से एक अलग चीज है)। आपको अभी भी आवश्यकता होगी grep
, और यह समस्या को हल कर सकता है या नहीं भी कर सकता है, लेकिन यह एक उल्लेख के लायक है।
ls
- यह बुरा जूजू है। इसके अलावा, क्या यह होना चाहिएgrep
? और क्या आप कुछ उदाहरण आउटपुट दे सकते हैं?