जवाबों:
इसके लिए खोज का उपयोग करें :
find . -name "foo*"
find
एक प्रारंभिक बिंदु की जरूरत है, और .
(डॉट) वर्तमान निर्देशिका को इंगित करता है।
find . foo*
, foo*
तो इसका विस्तार किया जाएगा और खोजने के लिए इसे पारित किया जाएगा।
" "
पुनरावर्ती खोज के लिए बहुत आवश्यक है।
find . -name "foo*" 2>/dev/null
पाइपिंग को grep में ढूंढना अक्सर अधिक सुविधाजनक होता है; यह आपको मनमाने वाइल्डकार्ड मिलान के लिए नियमित अभिव्यक्ति की पूरी शक्ति देता है।
उदाहरण के लिए, फ़ाइल नाम में असंवेदनशील स्ट्रिंग "फू" के साथ सभी फ़ाइलों को खोजने के लिए:
~$ find . -print | grep -i foo
find
भी है -iname
, -regex
और -iregex
इसलिए करने के लिए पाइप, केस-संवेदी वाइल्डकार्ड, regex, और केस-संवेदी रेगुलर एक्सप्रेशन मिलान के लिए झंडे grep
अनावश्यक है।
find
कमांड के साथ नहीं आते हैं जो उन विकल्पों का समर्थन करता है। कभी-कभी grep
एकमात्र विकल्प बन जाता है।
find
एक पैटर्न से मेल खाने वाली सभी फाइलें मिलेंगी:
find . -name "*foo"
हालांकि, अगर आप एक तस्वीर चाहते हैं:
tree -P "*foo"
उम्मीद है की यह मदद करेगा!
brew install tree
Mac OSX उपयोगकर्ताओं के लिए w / o apt-get
स्थापित
find -L . -name "foo*"
कुछ मामलों में, मुझे प्रतीकात्मक निर्देशिका लिंक को संभालने के लिए -L पैरामीटर की आवश्यकता है। डिफ़ॉल्ट रूप से प्रतीकात्मक लिंक को अनदेखा किया जाता है। उन मामलों में यह काफी भ्रामक था क्योंकि मैं निर्देशिका को एक उप-निर्देशिका में बदल दूंगा और फ़ाइल को पैटर्न से मेल खाता हुआ देखूंगा, लेकिन फ़ाइल नाम वापस नहीं करूंगा। उपयोग -L उस समस्या को हल करता है। खोजने के लिए प्रतीकात्मक लिंक विकल्प हैं -L -H
यदि आपका शेल एक नया ग्लोबबिंग विकल्प का समर्थन करता है (द्वारा सक्षम किया जा सकता है shopt -s globstar
) : आप उपयोग कर सकते हैं:
echo **/*foo*
किसी भी फाइल या फोल्डर को पुनरावर्ती खोजने के लिए। यह बैश 4, zsh और इसी तरह के गोले द्वारा समर्थित है।
व्यक्तिगत रूप से मुझे यह शेल फ़ंक्शन परिभाषित मिला है:
f() { find . -name "*$1*"; }
नोट: ऊपर की रेखा को सीधे शेल में चिपकाया जा सकता है या आपके उपयोगकर्ता में जोड़ा जा सकता है ~/.bashrc
फ़ाइल ।
फिर मैं टाइप करके किसी भी फाइल को देख सकता हूं:
f some_name
वैकल्पिक रूप से आप एक साधारण वाक्यविन्यास के साथ एक fd
उपयोगिता का उपयोग कर सकते हैं , जैसे fd pattern
।
shopt -s globstar
कमांड द्वारा विस्तारित ग्लोबिंग को सक्रिय करने की आवश्यकता है । यह बैश, zsh और इसी तरह के गोले में समर्थित है।
bash-3.2$ shopt -s globstar
देता हैbash: shopt: globstar: invalid shell option name
fd
मामले में, find
बहुत धीमी है, fd
उपयोगिता का प्रयास करें - एक सरल और तेज विकल्पfind
रस्ट में लिखा गया ।
वाक्य - विन्यास:
fd PATTERN
डेमो:
मुखपृष्ठ: https://github.com/sharkdp/fd
asciicast2vector
इसका उपयोग किया जा सकता है।
find <directory_path> -type f -name "<wildcard-match>"
वाइल्डकार्ड-मैच में आप वह स्ट्रिंग प्रदान कर सकते हैं जिसे आप मैच करना चाहते हैं जैसे * .सी। (सभी सी फाइलों के लिए)
आप उपयोग कर सकते हैं:
# find . -type f -name 'text_for_search'
यदि आप REGX का उपयोग करना चाहते हैं -iname
# find . -type f -iname 'text_for_search'
पुनरावर्ती फ़ाइल की खोज करने का डिफ़ॉल्ट तरीका, और अधिकांश मामलों में उपलब्ध है
find . -name "filepattern"
यह वर्तमान निर्देशिका में फ़ाइल नाम या पैटर्न के लिए पुनरावर्ती ट्रैवर्सिंग शुरू करता है जहां आप तैनात हैं। खोज आदेश के साथ, आप विकल्पों की पूरी सूची देखने के लिए वाइल्डकार्ड और विभिन्न स्विच का उपयोग कर सकते हैं
man find
या यदि आपके सिस्टम में मैन पेज उपलब्ध नहीं हैं
find --help
हालाँकि, अधिक आधुनिक और तेज़ उपकरण हैं, फिर पाते हैं, जो आपके पूरे फाइलसिस्टम को ट्रेस कर रहे हैं और आपकी फ़ाइलों को अनुक्रमणित कर रहे हैं, ऐसा ही एक सामान्य टूल है। इसे स्थापित करने के लिए डेटाबेस शुरू करने की जरूरत है, अगर स्क्रिप्ट आपके लिए इसे स्थापित नहीं करती है, तो इसे मैन्युअल रूप से टाइप करके किया जा सकता है
sudo updatedb
और, कुछ विशेष प्रकार की फ़ाइल देखने के लिए इसका उपयोग करने के लिए
locate filename
या, वर्तमान निर्देशिका के भीतर फ़ाइल नाम या पॉटर देखने के लिए, आप टाइप कर सकते हैं:
pwd | xargs -n 1 -I {} locate "filepattern"
यह फ़ाइलों के अपने डेटाबेस के माध्यम से दिखेगा और आपके द्वारा टाइप किए गए पैटर्न से मेल खाने वाले पथ नामों को जल्दी से प्रिंट करेगा। पता लगाने के विकल्पों की पूरी सूची देखने के लिए, टाइप करें:
locate --help
याman locate
इसके अतिरिक्त, आप क्रोन जॉब के माध्यम से निर्धारित समय पर डेटाबेस को अपडेट करने के लिए इसे कॉन्फ़िगर कर सकते हैं, इसलिए नमूना क्रॉन जो 1AM पर db को अपडेट करता है, वह निम्न होगा:
0 1 * * * updatedb
इन क्रोन नौकरियों को रूट द्वारा कॉन्फ़िगर करने की आवश्यकता है, क्योंकि अपडेटेड को पूरे फाइलसिस्टम को पार करने के लिए रूट विशेषाधिकार की आवश्यकता होती है।
मुझे यह देखकर आश्चर्य हुआ कि जब हम पुनरावर्ती रूप से जाने वाले होते हैं, तो इसका पता लगाना बहुत अधिक उपयोग नहीं किया जाता है।
मैं सबसे पहले ब्याज की वर्तमान फ़ोल्डर में फ़ाइलों की सूची प्राप्त करने के लिए "$ PWD" का पता लगाऊंगा, और फिर उन पर greps चलाऊंगा जैसा कि कृपया।
locate "$PWD" | grep -P <pattern>
बेशक, यह मान रहा है कि अद्यतन किया गया है और सूचकांक समय-समय पर अद्यतन किया जाता है। यह फाइल्स को चलाने के बजाय फाइल्स को खोजने का बहुत तेज़ तरीका है और इसे पेड़ से नीचे जाना है। इसे पूर्णता के लिए उल्लेख करना। खोजने के खिलाफ कुछ भी नहीं, अगर पेड़ बहुत भारी नहीं है।
locate "$PWD*.mp4"
बस याद दिलाने के लिए आप को छोड़ करने में सक्षम हो सकता है किgrep
नीचे आदेश किसी भी फाइल को खोजने में मदद करता है
1) मामले
2 की परवाह किए बिना) परिणाम
3 की अनुमति के बिना फ़ोल्डरों को बाहर करना ) 3 जड़ या आप की तरह से खोज करना। अपने द्वारा पसंद किए जाने वाले पथ को बदलें / बदलें।
सिंटेक्स:
खोज -iname '' 2> & 1 | grep -v "अनुमति से इनकार किया"
उदाहरण
find / -iname 'C * .xml' 2> & 1 | grep -v "अनुमति अस्वीकृत"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
यदि आप वाइल्डकार्ड के साथ विशेष फ़ाइल खोजना चाहते हैं, तो आप निम्न कोड का उपयोग कर सकते हैं:
find . -type f -name "*.conf"
मान लीजिए, आप यहां से प्रत्येक .conf फ़ाइलों को खोजना चाहते हैं:
.
इसका मतलब है कि यहां से शुरू हुई खोज (वर्तमान स्थान) का
-type
मतलब है कि यहां खोज का प्रकार फ़ाइल (एफ) है।
-name
इसका मतलब है कि आप * .conf नामों वाली फ़ाइलों को खोजना चाहते हैं ।
उपयोग
find path/to/dir -name "*.ext1" -o -name "*.ext2"
व्याख्या
find
से पुनरावर्तन करता है।-o
के लिए खड़ा है -or
। तो ऊपर इस वाइल्डकार्ड या यह एक के लिए खोज का मतलब है। यदि आपके पास केवल एक पैटर्न है तो इसकी कोई आवश्यकता नहीं है-o
।