कहते हैं कि नाम के साथ फाइलें हैं:
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
.
वर्तमान निर्देशिका से खोज आदेश शुरू होता है। स्ट्रिंग से मेल खाता है और केस संवेदी है। ( केस असंवेदनशील है) केवल फाइलों
की खोज।-name
bat
-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.