2011-10-18 19 views
22

का उपयोग कर निष्पादन योग्य फ़ाइलों को ढूंढना मुझे एक स्क्रिप्ट लिखनी है जो निर्देशिका में सभी निष्पादन योग्य फ़ाइलों को पाती है। तो मैंने इसे लागू करने के कई तरीकों की कोशिश की और वे वास्तव में काम करते हैं। लेकिन मुझे आश्चर्य है कि ऐसा करने का एक अच्छा तरीका है या नहीं।ls और grep

तो यह मेरा पहला दृष्टिकोण था:

ls -Fla | grep \*$ 

यह ठीक काम करता है, क्योंकि एफ ध्वज मेरे लिए काम करता है और प्रत्येक निष्पादन योग्य फ़ाइल एक तारक को कहते हैं, लेकिन मान लीजिए कि मुझे पसंद नहीं है चलो तारांकन चिह्न

तो यह दूसरा दृष्टिकोण था:

ls -la | grep -E ^-.{2}x 

यह भी ठीक काम करता है, मैं पहले चरित्र के रूप में एक पानी का छींटा चाहते हैं, तो मैं अगले दो अक्षरों में कोई दिलचस्पी नहीं है और चौथे चरित्र एक एक्स होना चाहिए ।

लेकिन आवश्यकताओं में थोड़ा अस्पष्टता है, क्योंकि मुझे नहीं पता कि मुझे उपयोगकर्ता, समूह या अन्य निष्पादन योग्य अनुमति की जांच करनी है या नहीं। तो यह काम करेगा:

ls -la | grep -E ^-.{2}x\|^-.{5}x\|^-.{8}x 

तो मैं चौथा, सातवां और दसवां चरित्र एक्स का परीक्षण कर रहा हूं।

मैं केवल उन फ़ाइलों grep करना चाहते हैं, फिर भी एक लाइन के दस पहले अक्षर के द्वारा उत्पादित में कम से कम एक एक्स:

अब मेरी असली सवाल है, वहाँ regex के साथ ls और ग्रेप का उपयोग कर कहने के लिए एक बेहतर समाधान है ls -la

+2

मदद मांगने से पहले वास्तव में किसी प्रकार का समाधान खोजने के लिए धन्यवाद। चूंकि आपको एलएस और जीईपी का उपयोग करने की आवश्यकता थी, ऐसा लगता है कि यह होमवर्क प्रश्न जैसा लगता है और मैं लोगों को होमवर्क के जवाब मांगने के बिना पूछता हूं (या कम से कम उनके प्रयासों का कोई विवरण नहीं)। मुझे पता है कि यह लगभग 4 साल बाद है, लेकिन फिर भी, अच्छी नौकरी। –

उत्तर

37

क्या आपको एलएस का उपयोग करने की आवश्यकता है? आप भी ऐसा ही करने के लिए ढूंढें उपयोग कर सकते हैं:

find . -maxdepth 1 -perm -111 -type f 

मौजूदा निर्देशिका में सभी निष्पादन योग्य फ़ाइलों वापस आ जाएगी। सभी बाल निर्देशिकाओं को पार करने के लिए -मैक्सडेप ध्वज निकालें।

आप इस भयानक कोशिश कर सकते हैं लेकिन यह उन फ़ाइलों से मेल खा सकता है जिनमें अनुमतियों की तरह तार शामिल हैं।

ls -lsa | grep -E "[d\-](([rw\-]{2})x){1,3}" 
+0

हाँ मुझे ls और grep का उपयोग करना है, लेकिन फिर भी आपको धन्यवाद – k13n

35

आप पूरी तरह ls और ग्रेप उपयोग करना आवश्यक है, इस काम करता है:

ls -Fla | grep '^\S*x\S*' 

यह लाइनें जहां पहला शब्द (गैर-सफ़ेद) कम से कम एक 'एक्स' में शामिल है मेल खाता है।

खोजें इसके लिए एक आदर्श उपकरण है।

find . -maxdepth 1 -type f -executable 
+0

आपके उत्तर के लिए और 'ढूंढें। -टेप f -executable' पूरी तरह से काम करता है। लेकिन जैसा कि मैंने पहले कहा था कि मुझे ls और grep का उपयोग करना है। मैं बस सोच रहा हूं कि एक स्मार्ट regex – k13n

+0

के लिए कोई समाधान है कोई विशेष कारण? एलएस आउटपुट के माध्यम से लूपिंग एक बुरा विचार है। –

+0

ठीक है, मैंने एक रेगेक्स जोड़ा जो आप चाहते हैं जो करेंगे। – rmmh

7

परीक्षण -x साथ शायद:

find . -type f -executable 

आप इसे रिकर्सिवली सभी निष्पादन योग्य सूचीबद्ध नहीं करना चाहते हैं, maxdepth का उपयोग करें: इसमें सभी फ़ाइलें (प्रकार च) कि निष्पादन योग्य हैं पाता है?

for f in $(\ls) ; do test -x $f && echo $f ; done 

\ ls ls shell aliases को बाईपास करेगा।

+1

AFAICS जो निर्देशिकाओं को भी सूचीबद्ध करता है। ओपी के साथ बेहतर हो सकता है ... 'एफ में $ (\ ls); करो/usr/bin/test -x $ f -a! -d $ f && echo $ f; किया गया –

5
for i in `ls -l | awk '{ if ($1 ~ /x/) {print $NF}}'`; do echo `pwd`/$i; done 

यह निष्पादनयोग्य के लिए पूर्ण पथ देता है।

-3
file * |grep "ELF 32-bit LSB executable"|awk '{print $1}' 
+0

यह उत्तर निम्न गुणवत्ता वाली समीक्षा कतार में बदल गया है, संभवतः क्योंकि आप कोड का कोई स्पष्टीकरण प्रदान नहीं करते हैं। यदि यह कोड प्रश्न का उत्तर देता है, तो अपने उत्तर में कोड समझाते हुए कुछ पाठ जोड़ने पर विचार करें। इस तरह, आप अधिक अपवर्तित होने की अधिक संभावना रखते हैं - और प्रश्नकर्ता को कुछ नया सीखने में मदद करें। – lmo