किसी फ़ाइल का पथ उसके नाम के आधार पर कैसे खोजें?


22

मैं settings.xmlअपने उबंटू मशीन में फ़ाइल खोजने की कोशिश कर रहा हूं । मेरे पास कोई सुराग नहीं है कि यह कहाँ है, और यह किस निर्देशिका में है।

मैंने इसका उपयोग करने की कोशिश की -

ls -R | grep settings.xml

लेकिन यह मुझे पूरा रास्ता नहीं दिखाता है कि यह कहाँ है .. क्या कोई अन्य कमांड है जिसे मुझे आज़माने की ज़रूरत है जो मुझे पूरा रास्ता दे सके?


4
जब भी आपको लगता है कि समाधान आउटपुट को पार्स करना है ls, तो आप लगभग निश्चित रूप से इसे गलत तरीके से कर रहे हैं
terdon

जवाबों:


23

तेज़ खोज के लिए (लेकिन निश्चित नहीं):

locate -br '^settings.xml$'

से man locate:

   locate  reads  one or more databases prepared by updatedb(8) and writes
   file names matching at least one of the PATTERNs  to  standard  output,
   one per line.

   -b, --basename
          Match  only  the base name against the specified patterns.  This
          is the opposite of --wholename.
   -r, --regexp REGEXP
          Search for a basic regexp REGEXP.  No PATTERNs  are  allowed  if
          this  option  is used, but this option can be specified multiple
          times.

^और $यह सुनिश्चित करें कि केवल वे फ़ाइलें जिसका नाम है settings.xmlऔर न फ़ाइलें हैं जिनके नाम शामिल settings.xml प्रिंट किया जाएगा।

डेटाबेस को अद्यतन / बनाने के लिए आपको पहली बार चलाने की आवश्यकता हो सकती है: updatedb(as root) locate


@terdon, आपने मुझे आश्चर्यचकित किया, मैंने पहले कभी नहीं देखा man locateथा !!! यह केवल सरल खोज उपकरण है। आपका बहुत बहुत धन्यवाद।
user.dz

हां, यह मेरी प्रतिक्रिया थी जब मैंने पहली बार मैन पेज पढ़ा :) :)
terdon

4
यह updatedbइस आदेश की भूमिका पर ध्यान देने योग्य है - locateअक्सर इसके बिना, मेरे लिए, वैसे भी विफल रहता है
rm-vanda

@ rm-vanda, मैंने उल्लेख करने के लिए उत्तर अपडेट कर दिया है updatedb। धन्यवाद।
user.dz

4
locate '*/settings.xml'locate(जहाँ उपलब्ध हो) के विभिन्न विभिन्न कार्यान्वयनों में संभवतः अधिक पोर्टेबल है ।
स्टीफन चेज़लस

15

फ़ाइल-सिस्टम के माध्यम से एक धीमी लेकिन स्थिर खोज, लेकिन निश्चित।

find / -xdev -name settings.xml

इसमें कुछ समय लगेगा और आपको कुछ अनुमति त्रुटियाँ मिल सकती हैं, लेकिन यह वहाँ हो जाएगा। यदि आपको कुछ और विचार मिल गया है, जहां यह स्थित हो सकती है तो पहली निर्देशिका को इससे बदल /दें/where/you/guess


4
जोड़ 2>/dev/nullकमांड के अंत में त्रुटि उत्पादन के सभी (शून्य डिवाइस के लिए stderr पुनः निर्देशित द्वारा) को दबाने होगा।
टान्नर स्विट

2
-xdev: अन्य filesystems पर निर्देशिका उतरना नहीं है।
पाब्लो ए

1

उदाहरण:

$ locate settings.xml
/usr/share/mime/application/x-cisco-vpn-settings.xml

0

पेड़ एक और अच्छा तरीका है, यदि आप सुनिश्चित नहीं हैं कि आप वास्तव में क्या देख रहे हैं, और यह थोड़ा तेज़ लगता है-:

tree -f / | grep settings.xml

अन्य उपयोगी झंडे: पेड़ पर मानव पठनीयता -iके मामले को नजरअंदाज कर देगा -h-

- मैन पेज में बहुत सारे उपयोगी विकल्प हैं -!


6
एक अच्छा विचार नहीं है, tree(1)फाइलों के एक ASCII- कला पेड़ को दिखाता है, जो तब द्वारा उत्परिवर्तित होता है grep(1)
वॉनब्रांड

1
हां, यदि आप उपयोग करने जा रहे हैं, तो आप और भी बेहतर उपयोग treeकर सकते हैं find . type -f
terdon

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