जवाबों:
locate filename
find -name '*filename*'
echo **/*filename*
ls -ld **/*filename*
(मुख्य नियम और शर्तों के लिए पढ़ें। फाइन प्रिंट के लिए मैनुअल पढ़ें।)
निर्देशिका की सामग्री को सूचीबद्ध करना एक द्वितीयक विशेषता की तरह है ls
। का मुख्य काम ls
, जो अपनी जटिलता का सबसे अधिक लेता है, वह अपने प्रदर्शन को ठीक करता है। (मैनुअल को देखें और यह चुनने के लिए कि फ़ाइलों को चुनने के लिए संबंधित विकल्पों की संख्या की तुलना करें। प्रत्येक फ़ाइल के बारे में कौन सी जानकारी प्रदर्शित करने के लिए कौन-सी जानकारी नियंत्रित करती है और प्रदर्शन कैसे स्वरूपित होता है। यह GNU ls के दोनों सत्य है जो आप ' शुरुआती दिनों से कम विकल्पों के साथ लिनक्स और अन्य प्रणालियों पर खोज करेंगे ।)
डिफ़ॉल्ट मोड ls
यह है कि जब आप इसे एक निर्देशिका पास करते हैं, तो यह उस निर्देशिका में फ़ाइलों को सूचीबद्ध करता है। यदि आप इसे किसी अन्य प्रकार की फ़ाइल (नियमित फ़ाइल, प्रतीकात्मक लिंक, आदि) पास करते हैं, तो यह उस फ़ाइल को सूचीबद्ध करता है। (यह अलग से प्रत्येक तर्क पर लागू होता है।) विकल्प -d
बताता है कि ls
कभी भी एक निर्देशिका में नहीं उतरना चाहिए।
ls
एक विकल्प है -R
जो इसे निर्देशिका को पुनरावर्ती रूप से सूचीबद्ध करने के लिए कहता है। लेकिन यह सीमित प्रयोज्यता है, और आउटपुट पर बहुत अधिक फ़िल्टरिंग की अनुमति नहीं देता है।
पैटर्न मिलान करने के लिए बहुत पहला उपकरण शेल ही है। आपको किसी अन्य कमांड की आवश्यकता नहीं है: बस अपने वाइल्डकार्ड टाइप करें और आप सेट हैं। इसे ग्लोबिंग के नाम से जाना जाता है ।
echo *filename*
परंपरागत रूप से, वाइल्डकार्ड वर्तमान निर्देशिका (या संकेतित निर्देशिका:) तक सीमित थे echo /some/where/*filename*
। एक *
किसी भी फ़ाइल नाम, या फ़ाइल नाम के किसी भी हिस्से से मेल खाता है, लेकिन *.txt
मेल नहीं खाएगी foo/bar.txt
। आधुनिक गोले ने पैटर्न को जोड़ा है **/
जिसका अर्थ है "इस निर्देशिका में, या इसके नीचे किसी भी निर्देशिका में (पुनरावर्ती)"। बैश के साथ, ऐतिहासिक अनुकूलता कारणों के लिए, इस सुविधा को स्पष्ट रूप से सक्षम किया जाना चाहिए shopt -s globstar
(आप इस लाइन को अपने में डाल सकते हैं ~/.bashrc
)।
echo **/*filename*
echo
कमांड सिर्फ आपके द्वारा शेल पर उत्पन्न फ़ाइल नामों की सूची को गूँजती है। एक अपवाद के रूप में, यदि कोई मेल फ़ाइल नाम नहीं है, तो वाइल्डकार्ड पैटर्न को बैश में अपरिवर्तित छोड़ दिया जाता है (जब तक कि आप सेट नहीं करते हैं shopt -s nullglob
, जिस स्थिति में पैटर्न एक खाली सूची में फैलता है), और zsh एक त्रुटि का संकेत देता है (जब तक आप सेट नहीं करते हैं setopt nullglob
, या setopt no_no_match
जो पैटर्न को अपरिवर्तित छोड़ देता है)।
आप अभी भी ls
इसके विकल्पों के लिए उपयोग करना चाह सकते हैं। उदाहरण के लिए, ls
रंगों के माध्यम से फ़ाइल की प्रकृति या अनुमति (निर्देशिका, निष्पादन योग्य, आदि) के बारे में संकेत दे सकते हैं। आप फ़ाइल की तिथि, आकार और स्वामित्व को प्रदर्शित करना चाह सकते हैं ls -l
। कई और विकल्पों के लिए मैनुअल देखें।
डायरेक्टरी ट्री में फ़ाइल देखने की पारंपरिक कमांड है find
। यह कई विकल्पों के साथ आता है कि कौन सी फाइलों को प्रदर्शित करना है और उनके साथ क्या करना है। उदाहरण के लिए, उन फ़ाइलों को देखने के लिए जिनका नाम *filename*
वर्तमान निर्देशिका और उसके उपनिर्देशिकाओं में पैटर्न से मेल खाता है और उनके नाम प्रिंट करते हैं:
find /some/dir -name '*filename*' -print
-print
एक कार्रवाई है (अधिकांश अन्य कार्यों में फ़ाइल पर कमांड निष्पादित करना शामिल है); यदि आप कोई कार्रवाई नहीं करते हैं, -print
तो निहित है। इसके अलावा, यदि आप किसी भी निर्देशिका को पार करने के लिए ( /some/dir
ऊपर) निर्दिष्ट नहीं करते हैं , तो वर्तमान निर्देशिका निहित है। शर्त -name '*filename'
केवल उन फाइलों को सूचीबद्ध करने (या कार्य करने) के लिए कहती है जिनका नाम उस पैटर्न से मेल खाता है; कई अन्य फ़िल्टर हैं, जैसे -mtime -1
कि पिछले 24 घंटों में संशोधित फ़ाइलों का मिलान करना। आप कभी-कभी उद्धरणों को छोड़ सकते हैं -name '*filename*'
, लेकिन केवल तभी जब वाइल्डकार्ड वर्तमान निर्देशिका में किसी भी फ़ाइल से मेल नहीं खाएगा (ऊपर देखें)। सब सब में, संक्षिप्त रूप है
find -name '*filename*'
एक और उपयोगी उपकरण जब आप जानते हैं (एक हिस्सा) एक फ़ाइल का नाम है locate
। यह उपकरण फ़ाइल नामों के डेटाबेस पर सवाल उठाता है। विशिष्ट प्रणालियों पर, यह हर रात ताज़ा होता है। locate
ओवर find /
का फायदा यह है कि यह बहुत तेज है। एक नकारात्मक पक्ष यह है कि इसकी जानकारी बासी हो सकती है। locate
बहु-उपयोगकर्ता प्रणालियों पर उनके व्यवहार में भिन्नता के कई कार्यान्वयन हैं : मूल locate
कार्यक्रम केवल सार्वजनिक रूप से पढ़ने योग्य फ़ाइलों को अनुक्रमित करता है (आप updatedb
दूसरे डेटाबेस बनाने के लिए साथी को चलाना चाह सकते हैं जो आपके खाते की सभी फ़ाइलों को अनुक्रमित करता है); अन्य संस्करण (एमोलेट, स्लोकेट) हैं जो सभी फ़ाइलों को अनुक्रमित करते हैं और locate
प्रोग्राम को डेटाबेस को केवल उन फ़ाइलों को वापस करने के लिए फ़िल्टर करते हैं जिन्हें आप देख सकते हैं।
locate filename
कभी-कभी आप सोचते हैं कि आपके वितरण में एक फ़ाइल एक पैकेज द्वारा प्रदान की जाती है, आप जानते हैं कि (फ़ाइल का हिस्सा) हिस्सा आपके पैकेज का नाम नहीं है, और आप पैकेज को स्थापित करना चाहते हैं। कई वितरण उसके लिए एक उपकरण प्रदान करते हैं। उबंटू पर, यह apt-file search filename
। अन्य सिस्टम पर समतुल्य कमांड के लिए, Pacman Rosetta की जाँच करें ।
आपके डॉस उदाहरण के बराबर होगा:
cd /
find . -name \*filename\* -print
लिनक्स पर आपको आम तौर पर -print
तर्क की आवश्यकता नहीं होती है, हालांकि, अब। यदि आप खुद को अन्य ऑपरेटिंग सिस्टम पर काम करते हुए पाते हैं, तो इसके बारे में जानना आसान हो सकता है।
यदि आप कुछ "तेज़" चाहते हैं , लेकिन एक मिशन-महत्वपूर्ण स्थिति में नहीं है और आप केवल यह जानना चाहते हैं कि क्या यह मौजूद है और यह कहाँ है, तो आप उपयोग कर सकते हैं locate
। यह निर्देशिका में सभी फाइलों का एक डेटाबेस रखता है जिसे आपने इस पर जानकारी एकत्र करने के लिए कहा है।
डिफ़ॉल्ट इंस्टॉल (उबंटू पर) में, locate
एक दैनिक cron
काम सेट करता है जो फ़ाइल सिस्टम को स्कैन करता है और डेटाबेस को अपडेट करता है ...
यदि आपको लगता है कि आपको अगले क्रोन अपडेट से पहले डेटाबेस को अद्यतित करने की आवश्यकता है, तो यह आमतौर पर find
या तो ls
बस चलाने sudo updatedb
और फिर से तेज है locate
। यह निश्चित रूप से तेज़ है यदि आपको अधिक खोज करने की आवश्यकता है ... जैसा कि इसके नाम से पता चलता है, updatedb
डेटाबेस का locate
उपयोग करता है जो अपडेट करता है ...
locate
बिल्ट-इन regex है, जो इसे बहुत आसान बनाता है ... मैं find
एक स्क्रिप्ट में उपयोग करूंगा , लेकिन मैं शायद ही कभी find
कमांडलाइन पर उपयोग करता हूं । मैं भी locate
(व्यक्तिगत) स्क्रिप्ट में उपयोग ... उदाहरण के लिए।locate -bir "oo.*datt.*mp4$"
locate
मिलान की गई फ़ाइलों के पूर्ण-योग्य पथ देता है।
find [path] -name [filename]
उदाहरण के लिए, अगर मैं / फ़ाइल निर्देशिका के लिए खोज करना चाहता हूं, जिसमें एक फ़ाइल नाम है, जिसमें मैं कमांड का उपयोग करूंगा:
find /home -name *foo*
man find
आदेश और तर्कों को खोजने के लिए अधिक जानकारी के लिए कमांड का उपयोग करें ,
*
शेल को व्याख्या करने से रोकने के लिए आपको एस को कोट करने या भागने की आवश्यकता है ।
ls
?