इस मामले में जीएनयू 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? और क्या आप कुछ उदाहरण आउटपुट दे सकते हैं?