क्या निर्देशिका / फ़ाइल संयोजन की खोज करना संभव है?


12

मुझे एक छवि खोजने की आवश्यकता है, ABC.jpg, जो मुझे पता है कि प्रोग्रामेटिक रूप से ABC_MPSC नामक एक निर्देशिका में रखा गया होगा। मैंने कोशिश की:

cd /
find . -name "ABC_MPSC/ABC.jpg"

लेकिन वह कुछ भी नहीं लौटाता है (मैं वास्तव में जानता हूं कि मैं जिस विशेष को खोज रहा हूं वह है, इसलिए मुझे पता है कि यह मौजूद है)। क्या कोई ऐसा आदेश है जो मुझे मैन्युअल रूप से खोजने की अनुमति नहीं दे सकता है?



2
आप इसका उपयोग करके भी पा सकते हैं locate, जो कि काफी तेज होना चाहिए, लेकिन केवल तभी काम करता है जब updatedbआखिरी बार फाइल पहले से मौजूद थी।
साइमन रिक्टर

जवाबों:


17

एक -pathविधेय है जो यहाँ उपयोगी है:

find . -path '*/ABC_MPSC/ABC.jpg'

POSIX वर्णन है कि विधेय के लिए है:

यदि प्राथमिक पाथनाम मिलान संकेतन में वर्णित प्रतिमान मिलान संकेतन का उपयोग करते हुए प्राथमिक मेल खाता है, तो प्राथमिक रूप से सही का मूल्यांकन करेगा। फ़ाइलनाम विस्तार के लिए उपयोग किए जाने वाले पैटर्न में अतिरिक्त नियम लागू नहीं होते हैं क्योंकि यह एक मेल ऑपरेशन है, विस्तार नहीं।

कारण यह है कि आपकी -name "ABC_MPSC/ABC.jpg"असफलता का कारण यह -nameहै:

वर्तमान पैथनेम के आधारनाम के पैटर्न से मेल खाने पर इसका सही मूल्यांकन होगा

दूसरे शब्दों में, वर्तमान फ़ाइल नाम -nameकी निर्देशिका को कभी नहीं देखता , केवल आधार फ़ाइल नाम ही (ABC.jpg, उदाहरण के लिए)।


10

दो तरीके ( उपयोग करने के-path अलावा ):

  1. निर्देशिका देखें, फिर फ़ाइल का पता लगाएं:

    find / -type d -name 'ABC_MPSC' -exec test -f {}/ABC.jpg \; -print
    

    यह पाया गया निर्देशिका के वर्तमान पथनाम findको विस्तारित {}करने के लिए कार्यान्वयन पर निर्भर करता है , भले ही यह इसके साथ समाहित हो /ABC.jpg(ऐसा करने की आवश्यकता नहीं है)। इसे भी लिखा जा सकता है

    find / -type d -name 'ABC_MPSC' \
        -exec sh -c 'test -f "$1"/ABC.jpg' sh {} \; -print
    
  2. फ़ाइल के लिए देखें, फिर यह माता-पिता की निर्देशिका का नाम देखें:

    find / -type f -name 'ABC.jpg' -exec sh -c '
        case $(dirname "$1") in
            */ABC_MPSC) exit 0 ;;
            *) exit 1
        esac' sh {} \; -print
    

इन दोनों विकल्पों -pathको जेफ शो के रूप में उपयोग करने की तुलना में धीमा होगा । मैं उन्हें यहाँ छोड़ रहा हूँ उदाहरण के रूप में कोई भी कम नहीं है, क्योंकि वे संभवतः अन्य चीजों के लिए अनुकूलित हो सकते हैं।

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