एक यूनिक्स प्रणाली पर "फ़ाइल प्रकार" नियमित फाइलें, निर्देशिका, नामित पाइप, चरित्र विशेष फाइलें, प्रतीकात्मक लिंक आदि जैसी चीजें हैं। ये प्रकार की फाइलें हैं जो findइसके -typeविकल्प के साथ फ़िल्टर कर सकती हैं ।
findउपयोगिता अपने आप में एक "खोल स्क्रिप्ट", "JPEG छवि फ़ाइल" या किसी अन्य के बीच नहीं भेद से कर सकते हैं नियमित रूप से फ़ाइल के प्रकार । इस प्रकार के डेटा को हालांकि fileउपयोगिता से अलग किया जा सकता है , जो अपने प्रकार को निर्धारित करने के लिए फाइलों के भीतर विशेष हस्ताक्षर देखता है।
विभिन्न प्रकार की डेटा फ़ाइलों को लेबल करने का एक सामान्य तरीका उनके MIME प्रकार से है , और fileMIME प्रकार की फ़ाइल को निर्धारित करने में सक्षम है।
का प्रयोग 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स्थान पर दूसरे के साथ कर सकते हैं , लेकिन यह भी करना संभव होगा-printfind
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की तलाश में थे या यदि आप पर्ल स्क्रिप्ट या उन लाइनों के साथ कुछ ढूंढ रहे थे।