एक यूनिक्स प्रणाली पर "फ़ाइल प्रकार" नियमित फाइलें, निर्देशिका, नामित पाइप, चरित्र विशेष फाइलें, प्रतीकात्मक लिंक आदि जैसी चीजें हैं। ये प्रकार की फाइलें हैं जो find
इसके -type
विकल्प के साथ फ़िल्टर कर सकती हैं ।
find
उपयोगिता अपने आप में एक "खोल स्क्रिप्ट", "JPEG छवि फ़ाइल" या किसी अन्य के बीच नहीं भेद से कर सकते हैं नियमित रूप से फ़ाइल के प्रकार । इस प्रकार के डेटा को हालांकि file
उपयोगिता से अलग किया जा सकता है , जो अपने प्रकार को निर्धारित करने के लिए फाइलों के भीतर विशेष हस्ताक्षर देखता है।
विभिन्न प्रकार की डेटा फ़ाइलों को लेबल करने का एक सामान्य तरीका उनके MIME प्रकार से है , और file
MIME प्रकार की फ़ाइल को निर्धारित करने में सक्षम है।
का प्रयोग file
के साथ find
नियमित रूप से फ़ाइलों की MIME प्रकार, और उपयोग करने के लिए कि केवल शेल स्क्रिप्ट को खोजने पता लगाने के लिए:
find . -type f -exec sh -c '
case $( file -bi "$1" ) in
*/x-shellscript*) exit 0
esac
exit 1' sh {} ';' -print
या, का उपयोग कर bash
,
find . -type f \
-exec bash -c '[[ "$( file -bi "$1" )" == */x-shellscript* ]]' bash {} ';' \
-print
यदि आप केवल उस नाम के साथ स्क्रिप्ट का पता लगाना चाहते हैं तो -name sunrise
पहले जोड़ें -exec
।
find
आदेश ऊपर में या वर्तमान निर्देशिका के नीचे सभी नियमित फ़ाइलों मिलेगा, और ऐसे प्रत्येक फ़ाइल कॉल के लिए एक छोटी लाइन खोल स्क्रिप्ट। यह स्क्रिप्ट file -bi
मिली हुई फ़ाइल पर चलती है और शून्य निकास स्थिति के साथ बाहर निकलती है यदि उस कमांड के आउटपुट में स्ट्रिंग है /x-shellscript
। यदि आउटपुट में वह स्ट्रिंग नहीं है, तो यह एक गैर-शून्य निकास स्थिति के साथ बाहर निकलता है जो find
अगले फ़ाइल के साथ तुरंत जारी रखने का कारण बनता है। यदि फ़ाइल को शेल स्क्रिप्ट के रूप में पाया गया, तो find
कमांड फ़ाइल के पाथनाम ( -print
अंत में, जिसे कुछ अन्य क्रिया द्वारा भी बदला जा सकता है) को आउटपुट करने के लिए आगे बढ़ेगा ।
file -bi
आदेश इच्छा आउटपुट फ़ाइल के MIME प्रकार। लिनक्स (और अधिकांश अन्य प्रणालियों) पर एक शेल स्क्रिप्ट के लिए, यह कुछ इस तरह होगा
text/x-shellscript; charset=us-ascii
file
उपयोगिता के थोड़े पुराने संस्करण वाले सिस्टम पर , यह हो सकता है
application/x-shellscript
सामान्य बिट /x-shellscript
सबस्ट्रिंग है।
ध्यान दें कि MacOS पर, आप का उपयोग करना होगा file -bI
के बजाय file -bi
वजह से कारणों ( -i
विकल्प कुछ अलग करता है)। MacOS पर आउटपुट लिनक्स सिस्टम के समान है।
क्या आप प्रत्येक पाए गए शेल स्क्रिप्ट पर कुछ कस्टम क्रिया करना चाहते हैं, आप ऐसा ऊपर की आज्ञाओं के -exec
स्थान पर दूसरे के साथ कर सकते हैं , लेकिन यह भी करना संभव होगा-print
find
find . -type f -exec sh -c '
for pathname do
case $( file -bi "$pathname" ) in
*/x-shellscript*) ;;
*) continue
esac
# some code here that acts on "$pathname"
done' sh {} +
या, के साथ bash
,
find . -type f -exec bash -c '
for pathname do
[[ "$( file -bi "$pathname" )" != */x-shellscript* ]] && continue
# some code here that acts on "$pathname"
done' bash {} +
सम्बंधित:
--filetype
खोज आदेश या कुछ और के लिए कोई विकल्प नहीं है जो आपको फ़ाइल का प्रकार बताएगा। केवल एक चीज जो आप कर सकते हैं वह है उपयोग करें--exec file {} \;
और फिर इसे पाइप करेंgrep Bourne
यदि आप बैश स्क्रिप्टgrep Perl
की तलाश में थे या यदि आप पर्ल स्क्रिप्ट या उन लाइनों के साथ कुछ ढूंढ रहे थे।