यहां मेरे जैसे शुरुआती लोगों के लिए विस्तारित स्पष्टीकरण के साथ एक सरलीकृत संस्करण है जो सीखने की कोशिश कर रहे हैं कि एक पंक्ति में एक से अधिक कमांड कैसे डाल सकते हैं।
यदि आप समस्या को चरणों में लिखना चाहते हैं, तो यह इस तरह दिखेगा:
// For every file in this directory
// Check the filetype
// If it's an ASCII file, then print out the filename
इस लक्ष्य को हासिल करने के लिए, हम तीन यूनिक्स आदेशों का उपयोग कर सकते हैं: find, file, और grep।
find निर्देशिका में हर फ़ाइल की जाँच करेगा।
fileहमें फिलामेंट देगा। हमारे मामले में, हम 'ASCII पाठ' की वापसी की तलाश कर रहे हैं
grep से आउटपुट में 'ASCII' कीवर्ड खोजेंगे file
तो हम कैसे एक साथ एक पंक्ति में इन स्ट्रिंग कर सकते हैं? इसे करने के कई तरीके हैं, लेकिन मुझे लगता है कि हमारे छद्म कोड के क्रम में ऐसा करना सबसे अधिक समझ में आता है (विशेषकर मेरे जैसे शुरुआती के लिए)।
find ./ -exec file {} ";" | grep 'ASCII'
जटिल लगता है, लेकिन बुरा नहीं जब हम इसे तोड़ देते हैं:
find ./= इस निर्देशिका की प्रत्येक फ़ाइल को देखें। findकि 'अभिव्यक्ति' से मेल खाता है, या जो कुछ भी किसी भी फ़ाइल का फ़ाइल नाम बाहर आदेश प्रिंट पथ, जो हमारे मामले में वर्तमान निर्देशिका है या के बाद आता है./
समझने के लिए सबसे महत्वपूर्ण बात यह है कि पहले बिट के बाद का सब कुछ सच या गलत के रूप में मूल्यांकन किया जाएगा। यदि सही है, तो फ़ाइल का नाम प्रिंट आउट हो जाएगा। यदि नहीं, तो कमांड चलता रहता है।
-exec= यह ध्वज खोज कमांड के भीतर एक विकल्प है जो हमें खोज अभिव्यक्ति के रूप में कुछ अन्य कमांड के परिणाम का उपयोग करने की अनुमति देता है। यह एक फ़ंक्शन के भीतर एक फ़ंक्शन को कॉल करने जैसा है।
file {}= अंदर बुलाया जा रहा है find। fileआदेश एक स्ट्रिंग है कि आप एक फ़ाइल के फ़ाइल प्रकार बताता है देता है। नियमित रूप से, यह इस तरह दिखेगा file mytextfile.txt:। हमारे मामले में, हम चाहते हैं कि findकमांड द्वारा जो भी फ़ाइल देखी जा रही है, उसका उपयोग करें , इसलिए हम {}एक खाली चर या पैरामीटर के रूप में कार्य करने के लिए घुंघराले ब्रेसिज़ में डालते हैं । दूसरे शब्दों में, हम सिस्टम से निर्देशिका में हर फ़ाइल के लिए एक स्ट्रिंग आउटपुट करने के लिए कह रहे हैं।
";"= इसके लिए आवश्यक है findऔर हमारी -execकमांड के अंत में विराम चिह्न है । यदि आपको इसे चलाने की आवश्यकता है, तो अधिक विवरण के लिए 'खोज' के लिए मैनुअल देखें man find।
| grep 'ASCII'= |एक पाइप है। पाइप बाईं ओर जो कुछ भी है उसका आउटपुट लेता है और जो कुछ भी दाईं ओर है उसका इनपुट के रूप में उपयोग करता है। यह findकमांड का आउटपुट लेता है (एक स्ट्रिंग जो कि किसी एकल फ़ाइल का फ़ाइल टाइप है) और यह देखने के लिए परीक्षण करता है कि इसमें स्ट्रिंग है या नहीं 'ASCII'। यदि ऐसा होता है, तो यह सच है।
find ./जब grepआदेश सही वापस आता है, तो सही के एक्सप्रेशन सही आएंगे । देखा।
find . -type f -exec grep -Il "" {} \;।