केवल दी गई डायरेक्टरी में फाइलें कैसे खोजें, और बैश का उपयोग करके उपनिर्देशिकाओं को अनदेखा करें


129

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

जिन फाइलों / पैटर्न में मेरी दिलचस्पी है: / dev / abc-scanner, / dev / abc-cash ...।

आदेश:

find /dev/ -name 'abc-*'

क्या लौटाया जा रहा है:

/dev/abc-scanner
/dev/abc-cash
...
...
...
/dev/.udev/names/abc-scanner
/dev/.udev/names/abc-cash

मैं बाद की फ़ाइलों को अनदेखा करना चाहता हूं: /dev/.udev / ...


9
विशिष्ट उपनिर्देशिकाओं को अनदेखा करें, या किसी उपनिर्देशिका में न उतरें? उत्तरार्द्ध के लिए,
-maxdepth

@frankc इसे उत्तर के रूप में पोस्ट करें।
cnicutar

जवाबों:


202

यदि आप केवल खोज को पहले स्तर तक सीमित करना चाहते हैं तो आप कर सकते हैं:

 find /dev -maxdepth 1 -name 'abc-*'

... या यदि आप विशेष रूप से .udevनिर्देशिका को बाहर करना चाहते हैं , तो आप कर सकते हैं:

 find /dev -name '.udev' -prune -o -name 'abc-*' -print

अगर मैं यह सूचीबद्ध करना चाहता था कि उपरोक्त सभी सिम्बलिंक को उपरोक्त पैटर्न में पाया गया है, तो क्या मैं सिर्फ एक पाइप का उपयोग करूंगा? कुछ ऐसा लगता है / dev -maxdepth 1 -name 'abc- *' | ls -l
प्रत्यय

1
इसके xargsबजाय उपयोग करना बेहतर है , इसलिए कुछ ऐसा है: find /dev -maxdepth 1 -name 'abc-*' | xargs ls -lलेकिन अगर कोई मौका है कि उनके पास नामों में find /dev -maxdepth 1 -name 'abc-*' -print0 | xargs -0 ls -l
व्हाट्सएप होगा

हालाँकि, स्टीफन डार्लिंगटन के जवाब के बारे में बताते हैं , मुझे यकीन नहीं है कि आप ऐसा क्यों नहीं करेंगेls -l /dev/abc-*
मार्क लोंगेयर

इसके अलावा, यदि आप यह पता लगाना चाहते हैं कि for x in /dev/abc-*; do readlink -f $x; done
सहानुभूति किस ओर

1
या यदि आप पहले स्तर पर ही उपनिर्देशिकाएँ चाहते हैं, ls -l /dev/abc-* /dev/*/abc-* | fgrep -v /dev/.udev... कम से कम मेरे लिनक्स पर /dev/*/*फ़ाइलों को शामिल नहीं करता है /dev/.udev/*तो आप इसे छोड़ सकते हैं fgrep -v
ट्रिपल

9

क्या कोई विशेष कारण है जिसे आपको उपयोग करने की आवश्यकता है find? आप बस lsउन फ़ाइलों को खोजने के लिए उपयोग कर सकते हैं जो एक निर्देशिका में एक पैटर्न से मेल खाते हैं।

ls /dev/abc-*

यदि आपको उपयोग करने की आवश्यकता है find, तो आप -maxdepth 1केवल निर्दिष्ट निर्देशिका पर लागू करने के लिए स्विच का उपयोग कर सकते हैं ।


मुझे लगता है कि आप का मतलब -maxdepth 1है-maxdepth 0
मार्क लॉन्गेयर

5
यह ध्यान दिया जाना चाहिए कि वाइल्डकार्ड यहां महत्वपूर्ण हिस्सा है, नहीं ls। आप के साथ एक ही फाइल को पा सकते हैं echoया wcया आप क्या, क्योंकि खोल आप के लिए वाइल्डकार्ड फैलता है। तो for file in /dev/abc-*; do something with each "$file"; doneहो सकता है कि ओपी वास्तव में क्या देख रहा हो।
ट्रिपल

1
आह, मैं कभी याद नहीं कर सकता कि यह किस तरह का दौर है ... संपादन के लिए धन्यवाद। इसके अलावा, यह ध्यान देने योग्य है कि यह सार्वभौमिक नहीं है। findउदाहरण के लिए Solaris संस्करण में यह नहीं है।
स्टीफन डार्लिंगटन

@tripleee +1। हाँ। यदि संभव हो तो शेल में यह सब करना बेहतर होगा।
स्टीफन डार्लिंगटन

1
@MustafaOzturk शानदार lsहै। for f in abc*; ...आपको जो चाहिए वह यह है।
स्टीफन डार्लिंगटन

4

यह वही कर सकता है जो आप चाहते हैं:

find /dev \( ! -name /dev -prune \) -type f -print

2
हां, यह काम करता है। -Maxdepth कुछ पुराने यूनिक्स पर खोजने में लागू नहीं है।
सीसीओ

-1
find /dev -maxdepth 1 -name 'abc-*'

मेरे लिए काम नहीं करता है। यह कुछ भी नहीं लौटाता। अगर मैं बस करूँ '।' यह मुझे उस निर्देशिका में सभी फाइलें देता है जिसके नीचे मैं काम कर रहा हूं।

find /dev -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls

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

जारी है। यह काम।

find ./ -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls
564751   71 -rw-r--r--   1 snyder   bfactory   115739 May 21 12:39 ./R24eTightPiPi771052-55.root
565197  105 -rw-r--r--   1 snyder   bfactory   150719 May 21 14:27 ./R24eTightPiPi771106-2.root
565023   94 -rw-r--r--   1 snyder   bfactory   134180 May 21 12:59 ./R24eTightPiPi77999-109.root
719678   82 -rw-r--r--   1 snyder   bfactory   121149 May 21 12:42 ./R24eTightPiPi771098-10.root
564029  140 -rw-r--r--   1 snyder   bfactory   170181 May 21 14:14 ./combo77v.root

स्पष्ट रूप से ब्याज की /dev निर्देशिका का मतलब है । लेकिन ./जरूरत है, सिर्फ नहीं ./क्या मुझे पता था कि के बाद भी के लिए की जरूरत स्पष्ट नहीं था/dev कम या ज्यादा का मतलब ।

मैं एक टिप्पणी के रूप में प्रतिक्रिया नहीं दे सका क्योंकि मेरी कोई 'प्रतिष्ठा' नहीं है।


1
आप अच्छे उत्तर देकर प्रतिष्ठा प्राप्त करते हैं। कृपया इस stackoverflow.com/conduct
aifrim

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