कहते हैं कि नाम के साथ फाइलें हैं:
batman.c
debate.c
cricketbat.c
Searchtag का उपयोग करके इन सभी फ़ाइलों को सूचीबद्ध करने के लिए मुझे क्या कमांड और इसका उपयोग कैसे करना चाहिए bat?
कहते हैं कि नाम के साथ फाइलें हैं:
batman.c
debate.c
cricketbat.c
Searchtag का उपयोग करके इन सभी फ़ाइलों को सूचीबद्ध करने के लिए मुझे क्या कमांड और इसका उपयोग कैसे करना चाहिए bat?
जवाबों:
batकहीं भी फाइल्स ढूंढना/path/to/folderजिनके नाम में कहीं भी सभी फाइलों को खोजने के लिए bat, आप उपयोग कर सकते हैं:
find /path/to/folder -name '*bat*'
मेरे पास है उद्धृत खोज पैटर्न *bat*, क्योंकि अगर उद्धरण को छोड़ दिया गया और फ़ाइलों से मेल *bat*मौजूदा निर्देशिका में, खोल विस्तार होगा *bat*उनमें से एक सूची में और पारित है कि करने के लिए find। तब findसही काम नहीं करेगा। ( \*bat\*और "*bat*"भी काम करते हैं।)
उस फ़ोल्डर में खोज करने के लिए, जो आप वर्तमान में हैं (उदाहरण के लिए, आपके द्वारा cdसंपादित किया गया है), उपयोग करें ., हमेशा की तरह:
find . -name '*bat*'
अपने पूरे कंप्यूटर को खोजने के लिए, का उपयोग करें/ । अपने घर निर्देशिका, उपयोग ~, या अपने घर निर्देशिका का पूरा नाम खोजने के लिए । ( शेल~ आपके होम डाइरेक्टरी के पूरी तरह से योग्य पथ पर विस्तृत है।)
आप, केस-insensitively खोज ताकि फ़ाइलों से युक्त करना चाहते हैं BAT, bAtऔर इसके आगे मिलान किया जाता है, का उपयोग -inameकरने के बजाय परीक्षण -nameपरीक्षण:
find /path/to/folder -iname '*bat*'
मैंने देखा है कि आपकी सभी फाइलें समाप्त हो गई हैं .c। यदि आप केवल उस तरह की फ़ाइलें ढूंढना चाहते हैं, तो उपयोग करें:
find /path/to/folder -name '*bat*.c'
मैंने देखा कि आपके सभी फ़ाइलनाम हैं bat या तो बहुत शुरुआत में है या .cप्रत्यय से पहले का हिस्सा है । यदि आप मेल खाने वाली फ़ाइलों से बचना चाहते हैं embattled.c, तो आप इसका उपयोग कर सकते हैं:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-oहै या ऑपरेटर।
केवल नियमित फ़ाइलों को खोजने के लिए - और फ़ोल्डर नहीं, प्रतीकात्मक लिंक, और विशेष उपकरण नोड्स - आप उपयोग कर सकते हैं -type f। यह अक्सर अनुशंसित होता है और कभी-कभी काफी उपयुक्त होता है ... लेकिन अक्सर वह नहीं जो आप वास्तव में चाहते हैं , खासकर यदि आप दौड़ रहे हैंfind स्वयं आउटपुट की जांच करने के उद्देश्य से । यदि आपके पास एक प्रतीकात्मक लिंक है जो आपकी खोज से मेल खाता है, तो क्या आप इसके बारे में जानना नहीं चाहेंगे?
यदि आप नियमित फाइल और प्रतीकात्मक लिंक दोनों को खोजना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
का उपयोग करता है -o ऑपरेटर और समूहीकरण के लिए कोष्ठक का भी (जिसे उद्धृत किया जाना चाहिए ताकि शेल उन्हें विशेष रूप से व्यवहार न करें, अन्यथा आपको एक सिंटैक्स त्रुटि मिलेगी)।
लेकिन मान लीजिए कि आप केवल प्रतीकात्मक लिंक देखना चाहते हैं जो अंततः एक नियमित फ़ाइल को इंगित करता है (और निर्देशिका, डिवाइस नोड्स आदि के लिए प्रतीकात्मक लिंक नहीं)। यह वास्तव में और भी सरल है: -xtypeइसके बजाय का उपयोग करें -type। बशर्ते आप ध्वज के findसाथ नहीं चल रहे हों -L, -xtypeएक प्रतीकात्मक लिंक पर उस फ़ाइल के प्रकार का परीक्षण करता है जिससे लिंक इंगित करता है।
find /path/to/folder -name '*bat*' -xtype f
यदि आपके पास किसी फ़ाइल के लिए किसी अन्य सिमलिंक के लिए एक सिमलिंक है, -xtype fतो इसके प्रत्यक्ष होने पर भी इसका मिलान होगा लक्ष्य एक रेगुलर फ़ाइल के बजाय एक अन्य सिम्लिंक है। यह लगभग हमेशा वही होता है जो आप चाहते हैं।
अक्सर लोग सोचते हैं कि वे चाहते हैं -type f , लेकिन वास्तव में वे चाहते हैं -xtype f।
findयदि आप निर्दिष्ट नहीं करते हैं तो डिफ़ॉल्ट क्रिया है -print। ऊपर दी गई सभी कमांड्स अपने आप के साथ बराबर हैं-print अंत में निपटने के ।
findअक्सर पाया जाने वाली फ़ाइलों के आधार पर कमांड चलाने के लिए उपयोग किया जाता है - अक्सर, कमांड जो बदलाव करते हैं। लेकिन ऐसी अन्य क्रियाएं भी हैं जिनका उद्देश्य इसके अलावा परिणाम प्रदर्शित करना है -print। विशेष रुचि है -ls:
find /path/to/folder -name '*bat*' -ls
यह प्रत्येक फाइल पर विस्तृत जानकारी देता है, एक बहु-स्तंभ प्रारूप में, (जैसा कि बिल्कुल वैसा ही नहीं), जो आप चलाकर देखेंगे ।ls file
findफ़ाइलों को खोजने के अन्य तरीकों और जानकारी के लिए, देखें:
findमैन्युअल पृष्ठ , सुलभ ऑनलाइन या चलाकर man findएक टर्मिनल में।find, locateऔरxargs उपयोगिताओं।-xtypeसलाह; शायद ls *bat*और -maxdepth/ mindepthभी ध्यान देने योग्य हैं।
ls पहले से ही शामिल है , मैंने findयहाँ के साथ पुनरावर्ती मामले पर ध्यान केंद्रित किया । बेशक, कुछ पैटर्न ( lsऔर findसाथ -maxdepth) से मेल खाने वाले फ़ाइलनामों की गैर (या कम) -सीरेक्टिव लिस्टिंग को कवर करने वाला एक विस्तृत उत्तर भी उपयोगी होगा। आप इस तरह के उत्तर को पोस्ट करना चाह सकते हैं!
सबसे आसान तरीका है दौड़ना
locate bat
इस तरह आप फ़ाइल नाम में "बैट" वाली फ़ाइलों के लिए पूरे कंप्यूटर के माध्यम से खोज सकते हैं
अपने पीसी पर फ़ाइलों की सूची को ताज़ा करने के लिए
updatedb
इस कमांड को तब चलाएं जब आपने हाल ही में अपने खाते में नई फाइलें जोड़ी हैं
updatetdb
updatedbमैन्युअल रूप से या स्वचालित रूप से चला गया था), sudo updatedbपहले चलाने की आवश्यकता होगी, हाँ।
bat।
find /में तेज है locate, जबकि findपुनरावर्ती सूची /से मेल खाता है और फिर रेगेक्स से मेल खाता है।
टर्मिनल खोलें और निर्देशिका को निर्देशिका में बदलें जहां से आप खोज शुरू करना चाहते हैं और फिर इस कमांड को चलाएं:
find . -name "*bat*" -type f
.वर्तमान निर्देशिका से खोज आदेश शुरू होता है। स्ट्रिंग से मेल खाता है और केस संवेदी है। ( केस असंवेदनशील है) केवल फाइलों
की खोज।-namebat-iname-type f
यदि फ़ाइलें वर्तमान निर्देशिका उपयोग में हैं:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
या (उन्हें लाइन से लाइन करने के लिए):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
यदि आप उस फाइल के लिए सिस्टम को खोजना चाहते हैं, तो उपयोग करें:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
आप केस असंवेदनशील फ़ाइल नाम मिलान के लिए विकल्प या केस संवेदी फ़ाइल नाम मिलान findके -inameविकल्प के साथ कमांड का उपयोग करना चाहते हैं -name। ये दोनों आपको वाइल्डकार्ड नामों का उपयोग करने देंगे। इसलिए, किसी भी फ़ाइल नाम को खोजने के लिए जिसमें "बैट" होगा, जिसका आप उपयोग करेंगे:
find / -iname '*bat*'
या
find / -name '*bat*'
*"किसी भी वर्ण (ओं)" का अर्थ है, इसलिए खोज batकिसी भी वर्ण के साथ खोज रही है , जिसमें कोई भी नहीं है, इससे पहले या बाद में। /रूट निर्देशिका से खोजें रिकर्सिवली, तो आप उपयोग कर सकते हैं .जो मौजूदा निर्देशिका, या तुम कहाँ से खोज करना चाहते हैं के लिए निरपेक्ष पथ से रिकर्सिवली खोज करेंगे। लिनक्स शेल स्क्रिप्ट में रेगेक्स का उपयोग करके फ़ाइलों की खोज कैसे करें, इस पर एक नज़र डालें
-type f, जो केवल निर्देशिकाओं को छोड़कर अधिक से अधिक करता है और अक्सर ऐसा नहीं होता है जो उपयोगकर्ता वास्तव में चाहते हैं ।
अच्छे पुराने का उपयोग करें find।
find <path_for_search> -type f -iname "*bat*"
उदा .:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
से man find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.