फ़ोल्डरों और उप फ़ोल्डरों में .sql एक्सटेंशन वाली सभी फाइलों को खोजें


17

मैं फ़ोल्डर्स और सब-फ़ोल्डर्स (पुनरावर्ती) में .sql एक्सटेंशन वाली सभी फाइलों को खोजना चाहता हूं।

मैं यह कैसे कर सकता हूँ?

जवाबों:


29

या ...

find $directory_name -name \*.sql

उदाहरण के लिए

find / -name \*.sql

या

find ~ \*.sql

(जहां ~ के लिए / घर / your_username /), या ...

find /usr/local/share/ \*.sql

इत्यादि।


2

कमांड लाइन में इसे चलाएं:

cd / && find | grep '\.sql$'

उस निर्देशिका में '/' बदलें जिसे आप खोजना चाहते हैं।

findआदेश (अतिरिक्त विकल्पों का उपयोग कर) ग्रेप बिना कार्य को पूरा करने में सक्षम है, लेकिन मैं इसके बाद के संस्करण के उपयोग और अधिक सुविधाजनक लगता है।

आदेश में, उपरोक्त आदेश:

  1. वर्तमान निर्देशिका को रूट निर्देशिका में बदल देता है ( cd /)
  2. सभी फाइलों और निर्देशिकाओं को वर्तमान निर्देशिका में और नीचे सूचीबद्ध करता है ( find)
  3. '.Sql' ( | grep '\.sql$') के साथ समाप्त होने वाली किसी भी चीज़ के लिए फ़ाइलें और निर्देशिका फ़िल्टर करता है

धन्यवाद, क्या आप इसे समझा सकते हैं? अपने grep का उपयोग कर और इसके उत्पादन को खोजने के लिए?
ब्लेंकमैन

इसके विपरीत, वास्तव में। मैं खोज रहा हूं और grep को इसका आउटपुट दे रहा हूं। मैंने ऊपर एक अधिक विस्तृत विवरण जोड़ा।
बरबरोसा

यह एक मैक पर भी काम करेगा? मैंने कोशिश की '| grep '\ _sql $' और इसने उपयोग सहायता जानकारी को आउटपुट किया।
ब्लेंकमैन

खोज एक शक्तिशाली उपकरण है और आपको वास्तव में आउटपुट को grep करने की आवश्यकता नहीं है। - यह एक अच्छा कड़ी है content.hccfl.edu/pollock/unix/findcmd.htm
पैंथर

1
findपहले से ही फिल्टर क्षमता है
enzotib

1

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैं इस पर बहुत नया हूं और मुझे एक निर्देशिका और उसके बच्चों की उपनिर्देशिकाओं में एक निश्चित विस्तार की सभी फाइलों को खोजने का एक आसान तरीका मिल गया है। वैसे आप पहली बार parent Directoryतत्कालीन नेविगेट करते हैं find . -name '*.sql'और आपको निर्देशिकाओं और इसके उपनिर्देशिकाओं में .sql एक्सटेंशन वाली सभी फाइलें मिलेंगी

मेरे मामले में मैं निर्देशिका और उसकी उपनिर्देशिकाओं में सभी .xml फ़ाइलों को हटाना चाहता था , इसलिए मैंने जो कुछ किया वह यह है कि मैंने यहां से हटा दियाfind . -name '*.xml' | xargs rm

आशा है कि यह किसी की मदद :)


2
find-deleteआज्ञा को समझता है । शामिल करने की आवश्यकता नहीं है rm। या आप -execएक पाइप के माध्यम से चक्कर के बिना इसे सीधे आह्वान करने के लिए कमांड का उपयोग कर सकते हैं और xargs
डेविड फ़ॉस्टर

0
locate -br \\.sql$ | egrep '^/folder/path/'

यदि यह स्थापित नहीं है, तो पहले इसे इसके साथ स्थापित करें:

sudo apt install mlocate

इसके लिए एक अप-टू-डेट mlocate.dbउदाहरण की आवश्यकता होती है जो उबंटू में बॉक्स से बाहर सेट नहीं किया जाता है (I blieve)। इसके अलावा, बस क्यों नहीं locate '/folder/path/*.sql'?
डेविड फ़ॉस्टर

@DavidFoersterI मैंने आपके द्वारा निर्दिष्ट के रूप में कोशिश की, लेकिन यह काम नहीं करता है, मुझे लगता है कि regex में regex से locateकुछ अलग सेटिंग का उपयोग किया गया हैegrep
Vzzarr

locate/folder/path/*.sqlनियमित रूप से नहीं, जैसे उदास भावों से मेल खाता है ।
डेविड फ़ॉस्टर

क्षमा करें, लेकिन man locateमुझे लगता है -r, --regexp REGEXP - Search for a basic regexp REGEXPकि मैं इसे एक regex था ग्रहण किया। वैसे भी मैंने आपकी "वैश्विक अभिव्यक्ति" की कोशिश की, लेकिन काम नहीं कर रहा है, मुझे खेद है
वेज़र

कृपया विकल्प के कम से कम पहले कुछ वाक्यों को पढ़िए, इससे पहले कि आप पर्यायवाची से चेरी-पिक करना शुरू करें: "यदि --regexनिर्दिष्ट नहीं किया गया है, तो PATTERNइसमें ग्लोबिंग अक्षर हो सकते हैं।" ( स्रोत )
डेविड फ़ॉस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.