निर्देशिका खोजने के लिए खोज का उपयोग करना


20

मैं उपयोग का पता लगाने हर समय फ़ाइलें है कि मैं का नाम पता लगाने के लिए, पता लगाने बहुत तेज है और मुझे लगता है कि प्यार करता हूँ। हाल ही में बनाई गई फ़ाइलों के लिए खोज बढ़िया है, आम तौर पर हाल ही में बनाई गई फ़ाइलों के साथ मुझे पता है कि मूल रूप से वे कहाँ बनाए गए थे इसलिए मुझे अपनी संपूर्ण फ़ाइल प्रणाली की खोज करने की आवश्यकता नहीं है।

जब मैं एक निर्देशिका का स्थान भूल गया हूँ, तो न तो लगता है और न ही आदर्श लगता है।

पता लगाएँ हमेशा बहुत अधिक जानकारी बाहर थूकती है क्योंकि एक निर्देशिका के भीतर हर फ़ाइल भी पता लगाने के लिए एक मैच है। उदाहरण के लिए अगर मैं अपनी फ़ाइल सिस्टम पर लॉग नाम की एक निर्देशिका खोज रहा था, तो पता चलता है कि लॉग टोंस और परिणाम के टन लौटाएगा। यदि मैं खोज के साथ एक ही बात करता हूं, तो / -नाम लॉग -type d ढूंढें को चलाने में मिनट लगते हैं और हर बार अनुमतियों की त्रुटियों को बाहर निकालता है, जब भी यह एक फ़ोल्डर का सामना करता है जो इसे पढ़ नहीं सकता है।

क्या कोई बेहतर तरीका है?

उत्तर: तो मैं grep के साथ चिपका रहा हूँ जब तक मुझे कुछ और नहीं मिलता है:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

जवाबों:


12

एक तरीका (मुझे संदेह है कि एक बेहतर तरीका हो सकता है) केवल उन रास्तों को वापस करने के लिए grep का उपयोग करना है जो आपके फ़ोल्डर नाम में समाप्त होते हैं:

locate foldername | grep /foldername$

28

आप विकल्प --regex( -r) का उपयोग कर सकते हैं locate:

locate -r '/log$'

हां (+1)। locateअपने स्वयं के बिल्ट-इन regex capablility है: -rया --regex... विकल्पों की पूरी श्रृंखला के लिए देखें: जानकारी का पता लगाएं
Peter.O

1
मुझे पता था कि एक बेहतर तरीका होना चाहिए!
मिस्टरबैन

इतना छोटा और यह आसानी से काम करता है। महान योगदान! नियमित भाव
प्रिय.जेसस

'इस मामले में आपको दोनों की आवश्यकता नहीं है : locate -r /log$पर्याप्त है।
8

5

आपने कोशिश की है:

locate /home/insertusernamehere/*/filename?

या

locate file | grep -i '^/home/.*/examplesubdirectory'?

या इस तरह के किसी भी बदलाव?


यह उत्तर दिखाता है कि grepआवश्यक नहीं है, और जैसा कि पहले सुझाए गए विकल्प में देखा गया है, न ही regexps हैं।
टॉम

2

यह रहा

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

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