मैं केवल एक निर्देशिका के लिए खोज का उपयोग कैसे कर सकता हूं


10

यह बड़ी संख्या में ऐसी फाइलें पाता है जो "ड्रॉपनोट" के विभिन्न उपनिर्देशिकाओं के अंतर्गत हैं।

$ locate Dropnot

क्या मुझे केवल निर्देशिका स्थान मिल सकता है locate? (कौन सी निर्देशिका "Dropnot" है)

तो अगर Dropnotमें है /home/me/, वह केवल प्रविष्टि है जो वापस आती है।

यदि हां, तो सबसे सरल / सबसे छोटा तरीका क्या है?

अधिमानतः एक ध्वज या प्रतीक के माध्यम से बाहर पाइपिंग और इसके लिए greping के बजाय, आदि, लेकिन मैं एक विकल्प के रूप में कुछ भी ले जाऊंगा।

शायद लाइन के अंत के लिए ड्रॉपऑन $ के कुछ प्रकार? (लेकिन काम नहीं किया)।

जवाबों:


5

locateचयनित प्रकार की फ़ाइल (जैसे निर्देशिका) खोजने के लिए उपयोग करने के लिए कोई विकल्प नहीं है , लेकिन आप अपने प्रश्न से वाक्यविन्यास का उपयोग कर सकते हैं - Dropnot$उन पंक्तियों को खोजने के लिए जो आपके साथ समाप्त होती हैं Dropnot। इसके लिए आपको -ePOSIX नियमित अभिव्यक्ति चालू करने के लिए विकल्प का उपयोग करना होगा ।

इस मामले में आपको उपयोग करना चाहिए:

locate -e Dropnot$

यह महत्वपूर्ण है कि आपके पास कौन सा संस्करण है। मेरे सिस्टम (Gentoo Linux) में मेरे पास सुरक्षित स्थान है:

$ locate --version
Secure Locate 3.1 - Released March 7, 2006

जिसमें उत्तर --basenameसे कोई विकल्प नहीं है uther। यह विकल्प GNU लोकेट द्वारा फाइंडटिल्स पैकेज से दिया गया है:

$ ./locate --version
locate (GNU findutils) 4.4.2

यदि आप GNU लोकेट के साथ regexp का उपयोग करना चाहते हैं तो आपको -rइसके बजाय स्विच का उपयोग करना चाहिए -e


1
-eविकल्प नहीं है only print entries for currently existing files?
phuclv

10

मैंने mlocateस्थापित किया है। यह रेडहैट द्वारा वितरित डिफ़ॉल्ट है, इसलिए यह फेडोरा, आरएचईएल, सेंटोस पर होगा। सेman 1 locate

-b, --basename
       Match  only  the  base  name  against the specified patterns. This 
       is the opposite of --wholename.

इसलिए यदि आप चलाते हैं locate -b '\Dropknot', तो यह केवल उसी स्ट्रिंग के साथ फाइल या निर्देशिका की रिपोर्ट करेगा।

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.

locate -b /Dropnotकाम किया
माइकल डुरंट

4

GNU का पता लगाने के साथ (अन्य कार्यान्वयन कार्यान्वित हो सकते हैं भिन्न):

locate '*/Dropnot'
locate Dropnot | grep '/Dropnot$'

जब तर्क में कोई वाइल्डकार्ड नहीं होता है, तो विकल्प के locateरूप में निर्दिष्ट खोज शब्द वाले मार्ग की तलाश करता है। जब तर्क एक शेल पैटर्न होता है जिसमें एक या एक से अधिक वाइल्डकार्ड वर्ण होते हैं, locateएक पूर्ण मैच के लिए दिखता है। यदि आप /Dropnotअंत में आउटपुट नहीं करना चाहते हैं :

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'

0

यदि आप RedHat पर हैं, तो संभवतः आपके पास सुरक्षित स्थान न होने पर एमएलओकेट स्थापित है। उस स्थिति में कोई विकल्प नहीं है और आपको मूल नियमित अभिव्यक्तियों का उपयोग करके खोज करने के लिए -r या --regexp का उपयोग करना होगा।


0

स्लैकवेयर slocateडिफ़ॉल्ट रूप से उपयोग करता है, जिसके पास विकल्प के साथ regex खोज है r :

locate -r '/Dropnot$'

नामित निर्देशिकाओं के लिए खोज करेंगे Dropnot

इस के लिए उदाहरण के लिए खोज करेंगे गिने -only Dropnotनिर्देशिका (Dropnot1, Dropnot2, आदि):

locate -r '/Dropnot[[:digit:]]\+$'

0

न जाने क्यों किसी ने ऐसा कुछ प्रस्तावित नहीं किया:

for i in $(locate MYDIR); do [ -d "$i" ] && echo $i; done

यह सिर्फ जांचता है कि क्या कोई ट्रेस स्ट्रिंग्स एक निर्देशिका है और इसे प्रिंट करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.