(मैं findयहाँ GNU मान रहा हूँ )
बस का उपयोग कर
find filename
यह त्वरित होगा , क्योंकि यह सिर्फ वापस आ जाएगा filename, या filenameअगर यह निर्देशिका है, या नाम के अंदर मौजूद नाम, तो वह नाम वर्तमान निर्देशिका में मौजूद नहीं था। यह एक बहुत ही त्वरित ऑपरेशन है, ls filenameलेकिन filenameएक निर्देशिका के समान (लेकिन पुनरावर्ती है)।
इसके विपरीत,
find | grep filename
वर्तमान निर्देशिका और नीचे से सभी नामों findकी एक सूची तैयार करने की अनुमति देगा , जो तब फ़िल्टर करेगा। यह स्पष्ट रूप से एक बहुत धीमी कार्रवाई होगी।grep
मैं यह सोचते हैं रहा है कि क्या किया गया था वास्तव में इरादा था
find . -type f -name 'filename'
यह filenameवर्तमान निर्देशिका में या नीचे कहीं भी एक नियमित फ़ाइल के नाम के रूप में दिखेगा ।
यह उतना ही त्वरित (या तुलनात्मक रूप से त्वरित) होगा find | grep filename, लेकिन grepसमाधान filenameप्रत्येक पाए गए नाम के पूर्ण पथ के साथ मेल खाएगा , उसी तरह से जो भी -path '*filename*'करेगा find।
भ्रम इस बात की गलतफहमी से है कि कैसे findकाम करता है।
उपयोगिता कई रास्तों को लेती है और इन रास्तों के नीचे सभी नामों को वापस करती है।
फिर आप विभिन्न नामों का उपयोग करके लौटे नामों को प्रतिबंधित कर सकते हैं जो फ़ाइल नाम, पथ, टाइमस्टैम्प, फ़ाइल का आकार, फ़ाइल प्रकार, आदि पर कार्य कर सकते हैं।
जब आप कहें
find a b c
आप findतीन रास्तों के तहत उपलब्ध हर नाम को सूचीबद्ध करने के लिए कहते हैं a, bऔर c। यदि ये वर्तमान निर्देशिका में नियमित फ़ाइलों के नाम हैं, तो इन्हें वापस कर दिया जाएगा। यदि उनमें से कोई भी एक निर्देशिका का नाम होता है, तो इसे उस निर्देशिका के सभी आगे के नामों के साथ वापस कर दिया जाएगा।
जब मैं करता हूं
find . -type f -name 'filename'
यह वर्तमान निर्देशिका ( .) और नीचे सभी नामों की एक सूची बनाता है । फिर यह उन नियमित फ़ाइलों के नाम को प्रतिबंधित करता है, न कि निर्देशिका आदि, के साथ -type f। फिर उन नामों पर और प्रतिबंध लगाया गया है जो filenameप्रयोग से मेल खाते हैं -name 'filename'। स्ट्रिंग filenameएक फ़ाइल नाम ग्लोबिंग पैटर्न हो सकता है, जैसे *.txt(बस इसे उद्धृत करना याद रखें!)।
उदाहरण:
निम्नलिखित .profileमेरे घर निर्देशिका में कॉल की गई "खोज" को लगता है :
$ pwd
/home/kk
$ find .profile
.profile
लेकिन वास्तव में, यह केवल पथ पर सभी नाम लौटाता है .profile(केवल एक नाम है, और वह इस फ़ाइल का है)।
फिर मैंने cdएक स्तर ऊपर उठाया और फिर से कोशिश की:
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
findआदेश अब किसी भी पथ कहा जाता है नहीं मिल सकता है .profile।
हालाँकि, अगर मुझे यह वर्तमान निर्देशिका को देखने के लिए मिलता है, और फिर केवल लौटे नामों को प्रतिबंधित करता है.profile , तो यह वहाँ से भी मिल जाता है:
$ pwd
/home
$ find . -name '.profile'
./kk/.profile