निर्देशिका के भीतर पुनरावर्ती सभी बाइनरी निष्पादन योग्य कैसे खोजें?


46

अगर मैं findइस तरह से कमांड का उपयोग करता हूं :

find /mydir/mysubdir -executable -type f

सभी निष्पादन योग्य फ़ाइलें सूचीबद्ध हैं (निर्देशिकाओं को छोड़कर), और निष्पादन योग्य स्क्रिप्ट फ़ाइल (जैसे script.sh, आदि)। मैं जो करना चाहता हूं वह केवल बाइनरी निष्पादन योग्य फ़ाइलों की सूची है।


1
कृपया शब्द 'बाइनरी' को शामिल करने के लिए विषय को बदलें, जो आपके प्रश्न का उत्तर देने के लिए महत्वपूर्ण है।
स्टीफन लासवर्स्की

जवाबों:


44

आप fileउपयोगिता की कोशिश कर सकते हैं । मैनपेज के अनुसार:

जादू परीक्षणों का उपयोग विशेष रूप से निश्चित प्रारूपों में डेटा के साथ फाइलों की जांच के लिए किया जाता है। इसका विहित उदाहरण द्विआधारी निष्पादन योग्य (संकलित कार्यक्रम) a.out फ़ाइल है, जिसका प्रारूप में परिभाषित किया गया है, और संभवतः मानक में निर्देशिका शामिल है।

आपको नियमित अभिव्यक्ति के साथ खेलना पड़ सकता है, लेकिन कुछ इस तरह से:

$ find -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'

फ़ाइल में बहुत सारे विकल्प हैं, इसलिए आप मैन पेज पर करीब से नज़र डालना चाहते हैं। मैंने पहले विकल्प का उपयोग किया, जो मुझे लगा कि आसानी से आउटपुट प्राप्त करने वाला है।


15
मैं कहता हूँ उपयोग करें find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print। यह केवल आपको फाइलें देगा (और इस तरह वह अगले कमांड में जा सकता है जिसे वह चलाना चाहता है)
Gert

serverfault.com/a/584595/211551 समाधान उन फ़ाइलों को ढूंढता है जो निष्पादन योग्य नहीं हैं, लेकिन निष्पादन योग्य हैं।
user2067125

OS X पर, आप GNU को इसके findसाथ स्थापित कर सकते हैं brew install findutilsया sudo port install findutilsफिर आप इसके समान प्रभाव के लिए एक आह्वान चला सकते हैं:gfind . -type f -executable -exec file '{}' \; | grep -i execut
GDP 2

7

लिपियों को बाहर करने का एक तरीका है, अर्थात, वे फ़ाइलें जिनके पहले दो अक्षर हैं #!:

find -type f -executable -exec sh -c 'test "$(head -c 2 "$1")" != "#!"' sh {} \; -print

कुछ प्रकार की फ़ाइलों के लिए, यह स्पष्ट नहीं है कि आप उन्हें स्क्रिप्ट या बाइनरी के रूप में वर्गीकृत करना चाहते हैं, उदाहरण के लिए बायटेकोड फाइलें। चीजें कैसे सेट की जाती हैं, इसके आधार पर, ये शुरू हो सकते हैं या नहीं #!। अगर ये आपके लिए मायने रखते हैं, तो आपको आंतरिक शेल स्क्रिप्ट को और अधिक जटिल बनाना होगा। उदाहरण के लिए, यहां बताया गया है कि कैसे आप ELF बायनेरिज़ और मोनो निष्पादक और ऑब्जेक्टिव कैमल बायोटेक प्रोग्राम शामिल कर सकते हैं, लेकिन शेल स्क्रिप्ट या पर्ल स्क्रिप्ट या जेवीएम बायोटकोड प्रोग्राम जैसे अन्य प्रकार के एक्जीक्यूटिव नहीं:

find -type f -executable -exec sh -c '
    case "$(head -n 1 "$1")" in
       ?ELF*) exit 0;;
       MZ*) exit 0;;
       #!*/ocamlrun*) exit 0;;
    esac
    exit 1
' sh {} \; -print

2

बस मामले में आप अपने आप को एक डाउनलिंक के साथ एक प्रणाली पर पाते findहैं (वहाँ अभी भी हैं, जैसा कि मैं लिखता हूं, आरएचईएल 5 चला रहे एक lotta विज्ञान क्लस्टर!) अपडेट के अधिकार के बिना: बजाय

find /mypath/ -executable -type f

उपरोक्त उत्कृष्ट उत्तरों में, आप कर सकते हैं, जैसे,

find /mypath/h -type f -perm -u+x

जो अनुमति बिट्स पर खोज करता है। दुर्भाग्य से ऊपर केवल उन फाइलों को ढूंढता है जिनके लिए उपयोगकर्ता निष्पादन योग्य है, लेकिन यह आमतौर पर मेरे लिए काम करता है।


यह अभी भी निष्पादन योग्य स्क्रिप्ट, केवल बायनेरिज़ ही नहीं मिलेगा।
Kusalananda
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.