(मैं 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