कमांड-लाइन का उपयोग करके नाम से एक फ़ाइल खोजें

मैं कमांड-लाइन का उपयोग करके फ़ाइल का स्थान निर्धारित करना चाहूंगा । मैंने कोशिश की है:

find . -type f -name "postgis-2.0.0"

और

locate postgis-2.0.0

कोई फायदा नहीं हुआ । फ़ाइल की निर्देशिका निर्धारित करने के लिए कमांड क्या है, इसका नाम प्रदान किया गया है?

कोशिश करो find ~/ -type f -name "postgis-2.0.0" बजाय.

का उपयोग करना . केवल वर्तमान निर्देशिका खोज करेंगे । ~/ आपकी संपूर्ण होम डायरेक्टरी खोजेगा (संभवतः आपने इसे कहाँ डाउनलोड किया है) । अगर आपने इस्तेमाल किया wget जड़ के रूप में, यह संभव है कि यह कहीं और हो सकता है ताकि आप उपयोग कर सकें / पूरे फाइल सिस्टम को खोजने के लिए ।

Goodluck

मैं कोशिश करूंगा:

sudo find / -type d -name "postgis-2.0.0"

द . केवल वर्तमान निर्देशिका में खोज का मतलब है, यदि आप वास्तव में नहीं जानते हैं तो रूट से सब कुछ खोजना सबसे अच्छा है । इसके अलावा, टाइप-एफ का अर्थ है फ़ाइलों की खोज, फ़ोल्डर नहीं । जोड़ना sudo इसे सभी फ़ोल्डर/सबफ़ोल्डर में खोजने की अनुमति देता है ।

के लिए आपका सिंटैक्स locate सही है, लेकिन आपको दौड़ना पड़ सकता है

sudo updatedb

पहले। किसी भी कारण से, मेरे पास कभी भी सौभाग्य नहीं है locate हालांकि।

locate द्वारा बनाई गई फ़ाइलों और निर्देशिकाओं के डेटाबेस का उपयोग करता है updatedb. इसलिए यदि आपने एक नई फ़ाइल डाउनलोड की है तो अधिक संभावना है कि आपका updatedb फ़ाइलों और निर्देशिकाओं के डेटाबेस को अपडेट नहीं किया है । आप उपयोग कर सकते हैं sudo updatedb उपयोग करने से पहले locate उपयोगिता कार्यक्रम।updatedb आम तौर पर लिनक्स सिस्टम पर दिन में एक बार चलता है ।

अन्य उत्तर अच्छे हैं, लेकिन मुझे छोड़ दिया गया है Permission denied कथन मुझे स्पष्ट उत्तर देता है (छोड़ देता है stderrनहीं चलने के कारण एस sudo):

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null

जहां:

  • / उस निर्देशिका से बदला जा सकता है जिससे आप अपनी खोज शुरू करना चाहते हैं
  • f के साथ बदला जा सकता d यदि आप फ़ाइल के बजाय निर्देशिका खोज रहे हैं
  • -iname के साथ बदला जा सकता -name यदि आप चाहते हैं कि खोज संवेदनशील हो
  • *यदि आप खोज में वाइल्डकार्ड नहीं चाहते हैं तो खोज शब्द में एस छोड़ा जा सकता है

एक विकल्प है:

find / -type f 2>/dev/null | grep "postgis-2.0.0"

इस तरह परिणाम देता है यदि खोज-शब्द पूर्ण फ़ाइल पथ में कहीं भी मेल खाता है, उदाहरण के लिए /home/postgis-2.0.0/docs/Readme.txt

फाइंड सबसे उपयोगी लिनक्स / यूनिक्स टूल्स में से एक है ।

कोशिश करो find . -type d | grep DIRNAME

कोशिश करो find . -name "*file_name*"

  • जहां आप बदल सकते हैं' । '(वर्तमान निर्देशिका में देखें) '/'(पूरे सिस्टम में देखें) या '~/'(होम डायरेक्टरी में देखें) ।

  • यदि आप कोई केस संवेदनशील नहीं चाहते हैं तो आप "-नाम" को "-नाम" में बदल सकते हैं ।

  • जहां आप बदल सकते हैं"फ़ाइल_नाम"(एक फ़ाइल जो फ़ाइल के बिल्कुल नाम से शुरू और समाप्त हो सकती है) ।

यह फ़ाइल का पता लगाने को सरल बनाना चाहिए:

यह आपको फ़ाइल का पूरा रास्ता देगा

tree -f  / | grep postgis-2.0.0

ट्री एक पेड़ की तरह प्रारूप में निर्देशिकाओं की सामग्री को सूचीबद्ध करता है । द -f फ़ाइल को पूर्ण पथ देने के लिए पेड़ को बताता है । चूंकि हमें इसके स्थान या मूल स्थान का कोई पता नहीं है, इसलिए फाइल सिस्टम रूट से खोजना अच्छा है / पुनरावर्ती रूप से नीचे की ओर । फिर हम अपने शब्द को उजागर करने के लिए ग्रेप को आउटपुट भेजते हैं, postgis-2.0.0

जबकि find कमांड डायरेक्टरी ट्री को पुनरावर्ती रूप से पार करने का सबसे सरल तरीका है, अन्य तरीके हैं और विशेष रूप से उबंटू के साथ आने वाली दो स्क्रिप्टिंग भाषाएं पहले से ही ऐसा करने की क्षमता रखती हैं ।

बैश

bash एक बहुत अच्छा है globstar शेल विकल्प, जो निर्देशिका पेड़ के पुनरावर्ती ट्रैवर्सल के लिए अनुमति देता है । हम सब करने की जरूरत है कि क्या आइटम में के लिए परीक्षण है ./**/* विस्तार एक फ़ाइल है और क्या इसमें वांछित पाठ है:

bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0

पर्ल

पर्ल में मॉड्यूल है, जो डायरेक्टरी ट्री के रिकर्सिव ट्रैवर्सल को करने की अनुमति देता है, और सबरूटीन के माध्यम से उन पर विशिष्ट कार्रवाई करता है । एक छोटी स्क्रिप्ट के साथ, आप डायरेक्टरी ट्री को पार कर सकते हैं, उन फ़ाइलों को पुश कर सकते हैं जिनमें वांछित स्ट्रिंग सरणी में होती है, और फिर इसे इस तरह प्रिंट करें:

#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find(     sub{          -f $_ && $_ =~ $ARGV[0]                 && push @wanted_files,$File::Find::name     }, ".");foreach(@wanted_files){    print "$_\n"}

और यह कैसे काम करता है:

$ ./find_file.pl  "postgis-2.0.0"                                                       ./testdir/texts/postgis-2.0.0

अजगर

पायथन एक और स्क्रिप्टिंग भाषा है जिसका उपयोग उबंटू दुनिया में बहुत व्यापक रूप से किया जाता है । विशेष रूप से, यह है os.walk() मॉड्यूल जो हमें उपरोक्त - ट्रैवर्स डायरेक्टरी ट्री के समान क्रिया करने और वांछित स्ट्रिंग वाली फ़ाइलों की सूची प्राप्त करने की अनुमति देता है ।

एक-लाइनर के रूप में ऐसा किया जा सकता है:

$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'                                                                         ['./testdir/texts/postgis-2.0.0']

पूरी स्क्रिप्ट ऐसी दिखेगी:

#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."):    for i in f:        if "postgis-2.0.0" in i:            print(os.path.join(r,i))

$ find . -type f | grep IMG_20171225_*
देता है
./03-05--2018/IMG_20171225_200513.jpg
आदेश के बाद डॉट find एक प्रारंभिक बिंदु बताना है,
इसलिए-वर्तमान फ़ोल्डर,
नाम फ़िल्टर के माध्यम से "पाइप्ड" (=फ़िल्टर किया गया) IMG_20171225_*

‘लोकेट’ कमांड ठीक है, बस अपडेटेड बीकमांड का उपयोग करके पहले स्थित बी को अपडेट करें

यदि यह पहले से स्थापित है, तो नया फ़ाइल नाम अब पोस्टगिस-2.0.0 नहीं हो सकता है । आमतौर पर पैकेज प्रबंधकों के माध्यम से इंस्टॉलेशन के बाद, निष्पादन योग्य $पथ फ़ोल्डरों में से एक में होंगे, स्थान देखने के लिए कौन सा पोस्टगिस आज़माएं । यदि यह कुछ भी नहीं देता है, तो केवल आपको मैन्युअल रूप से फ़ाइल स्थान की तलाश करनी चाहिए ।