जवाबों:
अद्यतन : पता लगाने के आर्गन के संबंध में शेल के फ़ाइल नाम के विस्तार के साथ पता लगाने के regex विकल्प का उपयोग करने के बारे में एक नोट ...
SHELL FILENAME का विस्तार
जब आप लिखते हैं locate /bin/b*
(ध्यान दें कि कोई उद्धरण नहीं है), तो कई चीजें होती हैं।
locate
को कई अलग-अलग कमांडलाइन आर्ग के रूप में पारित किया गया है। locate
फिर इनमें से प्रत्येक args को इसके डेटाबेस की प्रत्येक फाइल के खिलाफ टेस्ट करता है, और आउटपुट मैच करता है। हालाँकि ध्यान दें, कि 'पता' में वर्तमान कार्यशील निर्देशिका की कोई अवधारणा नहीं है। यह केवल अपने डेटाबेस में पूरी तरह से योग्य फ़ाइल-नामों के खिलाफ आपके args से मेल खाता है।
इसका मतलब यह है कि यह दोनों से मेल खाएगा /bin/bash
और /home/user/bin/brackets
आपके पास इस तरह से कुछ हद तक नियंत्रण है, लेकिन फिर से खोजें के रेगेक्स खोज अधिक प्रदान करता है; जैसा कि पता लगाने के कुछ अन्य विकल्प हैं।
LOCATE'S REGEX OPTION
जब आप locate -r "/bin/b.*"
अलग-अलग चीजें टाइप करते हैं तो सिंपल आर्ग्स के साथ होता है .. ( शेल-एक्सटेंडेड-आर्ग्स सिंपल एर्ग्स की लिस्ट है)
-r
विकल्प बताता है का पता लगाने एक regex पैटर्न के रूप में अपने आर्ग के इलाज के लिए। locate -r "^/bin/b.*"
साथ शुरू होने वाले फ़ाइल नाम ... eg2। फ़ाइल नाम के साथ / घर / उपयोगकर्ता / बिन / बी शुरू होता है .. ध्यान दें कि ~ / "उद्धरण चिह्नों" द्वारा संरक्षित नहीं है और इसलिए शेल टिल्ड-विस्तार के अधीन है जो ~ / में / घर / उपयोगकर्ता / में परिवर्तित होता है locate -r ~/"bin/b.*"
सारांश: "शेल फाइलनाम विस्तार" 'रेगेक्स' के लिए काफी अलग है
अब वापस मूल पोस्ट पर आते हैं:
locate
आम तौर पर पूरे डेटाबेस को स्टडआउट करने के लिए सूचीबद्ध करता है, इसलिए इसे एक विशेष निर्देशिका तक सीमित करने के लिए जिसे आपको इसे फ़िल्टर करने की आवश्यकता है ... आप यह पता लगाने के विकल्पों के माध्यम से कर सकते हैं।
आप केवल शेल-ग्लोबिंग के बजाय ... ( locate /dir/myfile*
शेल-ग्लोबिंग) ...
से जानकारी का पता लगाने : -r
,--regex
नोट: -i = मामले को अनदेखा करें
। । । । । -आर = रेगेक्स
। । । । । ~ / शेल / होम / उपयोगकर्ता (जब ~ / उद्धरण में नहीं है) द्वारा विस्तारित किया जाएगा
। । । । । '\' (बास्कलैश + स्पेस; कोई उद्धरण नहीं) एक शाब्दिक स्थान है (शेल विस्तार से बचने के लिए)। आप स्ट्रिंग को उद्धरणों में रख सकते हैं, लेकिन ~ / उद्धरण के बाहर छोड़ना सुनिश्चित करें: ~/my\ regex
या-/"my regex"
जैसे। locate -ir ~/".*"la\ bella\ vita
के रूप में ही है locate -ir ~/".*la bella vita"
और कहीं भी होने वाली "ला बेला वीटा" के लिए अपने पूरे घर निर्देशिका खोज करेंगे।
आप खोज को केवल फ़ाइल नाम तक सीमित कर सकते हैं लेकिन -b
या का उपयोग करके --basename
.. जिस स्थिति में regex start-of-line ^
केवल बेसनेम पर लागू होती है ...
मैं आमतौर पर खुद का उपयोग कर पाता हूं locate -bir
PS .. Locate
इतनी तेज है, कि मैंने कभी इस्तेमाल नहीं किया है find
... और न ही मैंने नॉटिलस सर्च का इस्तेमाल किया है (बहुत धीमी गति से)
'डिटेक्ट' के साथ, यदि आप किसी ऐसी चीज की तलाश कर रहे हैं, जो नई जोड़ी गई है, तो बस sudo updatedb
डिटेक्ट के डेटाबेस को रिफ्रेश करने के लिए चलाएं ... (लेकिन अगर आपने इसे नया जोड़ा है, तो आप शायद जानते हैं कि यह कहां है:) ...।
इसे इस तरह से grep के माध्यम से पाइप करें
$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless
संपादित करें: अन्य उत्तर बेहतर है, मुझे नहीं पता था कि आप पता लगाने के लिए एक पैटर्न पास कर सकते हैं।
locate
एक O(log(n))
खोज खत्म हो locatedb
जाती है, तो आप पहले से ही कम किए गए उप-परिणामों पर खोज grep
करने के लिए regex का उपयोग कर सकते हैं O(m)
। (n में कुल प्रविष्टियों की संख्या locatedb
[अर्थात आपकी ड्राइव की सभी फाइलें], मी = # प्रविष्टियों की संख्या जो आपके में कम मेल खाती हैं locatedb
), कुल चल जटिलता: O(log(n)) + O(m)
जहां एम औसतन है log(n)
, इसलिए आप प्रदर्शन करते समय 2*O(log(n))
विरोध O(n)
करते हैं। सभी प्रविष्टियों पर एक regex क्वेरी locatedb
।
O(log(n))
जबकि रेगेक्स खोज है O(n)
? Db में प्रविष्टियों की मात्रा प्रत्येक मामले में समान है। मुझे लगता है कि यह खोज एल्गोरिथ्म है?
आप उपयोग कर सकते हैं। locate /rootpath/*filenamespec
मैंने पहले इसकी कोशिश नहीं की थी, लेकिन यह काम करने लगता है। अपने उदाहरण के लिए, यह होगाlocate /home/tim/science/*math*
आप उस तरह के व्यवहार के find
बजाय कमांड को देखना चाहते locate
हैं। वाक्य-विन्यास होगा find rootforsearch -name filenamepattern -print
। इस स्थिति में, आपके उदाहरण की आवश्यकता होगी। find /home/tim/science -name *math* -print
क्योंकि जितनी जल्दी खोज करने के लिए कोई डेटाबेस नहीं है उतना तेजी से खोजें ... यह वास्तव में फाइल सिस्टम को खोजता है। बहुत सारे विकल्प हैं जो आप प्रिंट के अलावा अन्य उपयोग कर सकते हैं, यदि आप वास्तव में फ़ाइल के साथ कुछ करने का इरादा रखते हैं।
locate
स्वयं का उपयोग करता है (जैसे किसी भी अन्य उपयोगिता की आवश्यकता नहीं है grep
) और रेगेक्स के बिना करता है (जो इस मामले में अच्छा है, लेकिन अनावश्यक है)।