टर्मिनल में एक फ़ोल्डर के भीतर सभी निष्पादन योग्य फ़ाइलें खोजें


19

मेरे पास एक फ़ोल्डर myfolderहै जिसमें फ़ाइलों / फ़ोल्डरों का एक विशाल पदानुक्रम है।
इस फ़ोल्डर के भीतर सभी निष्पादन योग्य फ़ाइलों को कैसे खोजें?

उबंटू पर यह काम करता है: find . -executable -type f

लेकिन मैक ओएस एक्स मावेरिक्स (जो भी उपयोग करता है bash) इसे प्राप्त करने में विफल रहता है:

find: -executable: unknown primary or operator

जवाबों:


30

यह निष्पादन योग्य बिट सेट के साथ सभी फाइलें (सहानुभूति नहीं) पाएगा:

find . -perm +111 -type f

यह सीमलिंक भी पाएगा (जो अक्सर समान रूप से महत्वपूर्ण होते हैं)

find . -perm +111 -type f -or -type l

यहां बताया गया है कि यदि यह स्पष्ट नहीं है तो कमांड कैसे काम करता है:

  • find जाहिर है कार्यक्रम मिल (:
  • .( .= वर्तमान निर्देशिका) में खोज शुरू करने के लिए निर्देशिका को संदर्भित करता है
  • -perm +111= किसी भी निष्पादन योग्य बिट सेट के साथ ( +जिसका अर्थ है "इन बिट्स में से कोई भी", 111स्वामी, समूह और किसी पर निष्पादन योग्य बिट के लिए अष्टक है)
  • -type fमतलब टाइप एक फाइल है
  • -or बूलियन या
  • -type lका अर्थ है कि प्रकार एक प्रतीकात्मक लिंक है

2
आप लिंक से संबंधित फ़ाइल के आँकड़े वापस करने के लिए किसी भी कॉल का कारण बनने के -Lबजाय उपयोग कर सकते हैं , लिंक ही नहीं। -or -type lstatfind
इयान सी

इस दृष्टिकोण के साथ मुझे जो समस्या मिली है वह यह है कि किसी भी फ़ाइल में रन की अनुमति हो सकती है। उदाहरण के लिए, जब आप विंडोज से कुछ टेक्स्ट फाइल डाउनलोड करते हैं, तो अनुमति गड़बड़ हो जाती है।
इवान जेड। जिओ

5

मैं इयान के जवाब का काम नहीं कर सका (10.6.8), लेकिन, निम्नलिखित ने अपेक्षित परिणाम दिए:

find . -type f -perm +0111 -print

अद्यतन संपादित करें

यह भी काम करने लगता है!

find . -type f -perm +ugo+x -print

मुझे लगता है कि उपयोगकर्ता / समूह / अन्य विनिर्देशकों के बिना "x" अर्थहीन है।


प्रतीकात्मक वाक्यविन्यास नया होना चाहिए - यह इंगित करने के लिए धन्यवाद। मैंने अपने उत्तर को अपडेट किया, इसलिए यह ऑक्टल्स का उपयोग करता है और पुराने ओएस एक्स संस्करणों के साथ पीछे की ओर संगत है।
इयान सी

अजीब तरह से, 10.6 मैनपेज का वह भाग बिल्कुल वैसा ही है जैसा आपने उद्धृत किया था .... जो मुझे थोड़ा गहरा खुदाई करने के लिए पर्याप्त था और देखें कि बिल्ली क्या चल रही थी। ऊपर मेरी प्रतिक्रिया संशोधित।
केंट

2
निष्कर्ष: BDS कमांड सिंटैक्स अजीब है।
इयान सी

3

ओएस एक्स में खोजने के लिए मैन पेज से :

 -perm [-|+]mode
         The mode may be either symbolic (see chmod(1)) or an octal number.  If the mode is symbolic, a
         starting value of zero is assumed and the mode sets or clears permissions without regard to the
         process' file mode creation mask.  If the mode is octal, only bits 07777 (S_ISUID | S_ISGID |
         S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) of the file's mode bits participate in the comparison.
         If the mode is preceded by a dash (``-''), this primary evaluates to true if at least all of
         the bits in the mode are set in the file's mode bits.  If the mode is preceded by a plus
         (``+''), this primary evaluates to true if any of the bits in the mode are set in the file's
         mode bits.  Otherwise, this primary evaluates to true if the bits in the mode exactly match the
         file's mode bits.  Note, the first character of a symbolic mode may not be a dash (``-'').

तो आप की जरूरत है:

find . -type f -perm +0111 -print

याद रखें कि OS X BSD- आधारित है , न कि Linux आधारित, इसलिए आपके द्वारा Linux वितरण में उपयोग की जाने वाली Gnu कमांड (जिनमें findसे एक उनमें से एक है) जरूरी नहीं कि वे OS X में ही हों। एक शेल अंतर, यह एक ऑपरेटिंग सिस्टम / ऑपरेटिंग सिस्टम उपयोगिता उपकरण अंतर है।


1

एक बहुत पुराना प्रश्न, मैं जागरूक हूं, लेकिन एक समाधान की तलाश में मुझे बेहतर उत्तर मिल सकता है।

"खोज" का उपयोग करने के साथ मुख्य समस्या यह है कि यह निष्पादन योग्य पर सेट विशेषता पर निर्भर करता है, भले ही यह विशेषता गैर-निष्पादन योग्य फ़ाइल के लिए सेट हो।

MacOS एक आसान छोटी कमांड लाइन टूल के साथ आता है " file", जो फ़ाइल जानकारी प्रदर्शित करता है, उदाहरण के लिए:

$> file *

Distribution:             directory
SomeFile.icns:            Mac OS X icon, 3272878 bytes, "ic09" type
MyPicture.png:            PNG image data, 1024 x 1024, 8-bit/color RGBA, non-interlaced
NSHelpers.pas:            Algol 68 source text, ASCII text
myProgram:                Mach-O 64-bit executable x86_64

जैसा कि आप देख सकते हैं, 'MyProgram' एक निष्पादन योग्य है, और अच्छी तरह से संकेत दिया गया है। चूँकि पुराने 32bit निष्पादकों में वाक्यांश "निष्पादन योग्य" होगा, साथ ही, निम्नलिखित सभी सही निष्पादन योग्य (बायनेरिज़) को सूचीबद्ध करना चाहिए:

file * | grep "executable"

आशा है कि यह किसी के लिए भी एक ही प्रश्न के उत्तर की तलाश में उपयोगी होगा।

नोट: fileप्रतीत नहीं होता है कि उपनिर्देशिका के माध्यम से पुनरावृत्ति करने के लिए एक फ़ंक्शन है।

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