2011-10-10 10 views
61

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

फ़ाइलें/पैटर्न मैं में दिलचस्पी रखता हूँ: /dev/abc-स्कैनर,/dev/abc-नकदी ....

आदेश:

नीचे आदेश है कि मैं का उपयोग कर रहा है
find /dev/ -name 'abc-*' 

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

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

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

+7

विशिष्ट उपनिर्देशिका की अनदेखी, या नहीं किसी भी subdire में उतर ctories? बाद के लिए, -मैक्सडेपथ 1 विकल्प – frankc

+0

@frankc का उपयोग उत्तर के रूप में पोस्ट करें। – cnicutar

+0

संभावित डुप्लिकेट [खोज से निर्देशिका को बाहर करें। कमांड] (http://stackoverflow.com/questions/4210042/exclude-directory-from-find-command) – BroSlow

उत्तर

95

तुम सिर्फ प्रथम स्तर के लिए ढूंढें सीमित करना चाहते हैं आप कर सकते हैं:

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

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

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

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

+1

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

+0

हालांकि, [स्टीफन डार्लिंगटन का उत्तर बताता है] (http://stackoverflow.com/questions/7715485/how-to-only-find-files-in-a-given- निर्देशिका-and -ignore-subdirectories-use-bash/7715550 # 7715550), मुझे यकीन नहीं है कि आप केवल 'ls -l/dev/abc- * ' –

7

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

ls /dev/abc-* 

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

+0

मुझे लगता है कि आप '-मैक्सडेपथ 0' –

+4

' के बजाय '-मैक्सडेपथ 1'' का अर्थ है, यह ध्यान दिया जाना चाहिए कि वाइल्डकार्ड यहां महत्वपूर्ण हिस्सा है, 'एलएस' नहीं। आप 'echo' या' wc' के साथ एक ही फाइलें पा सकते हैं या आपके पास क्या है, क्योंकि खोल आपके लिए वाइल्डकार्ड फैलाता है। तो 'फ़ाइल में/dev/abc- * में; प्रत्येक "$ फ़ाइल" के साथ कुछ करें; हो सकता है कि ओपी वास्तव में क्या देख रहा हो। – tripleee

+1

आह, मैं कभी याद नहीं कर सकता कि यह किस तरह से है ... संपादन के लिए धन्यवाद। इसके अलावा, यह ध्यान देने योग्य है कि यह सार्वभौमिक नहीं है। 'ढूंढ' के सोलालिस संस्करण में उदाहरण के लिए यह नहीं है। –

2

यह है कि तुम क्या चाहते हो सकता है:

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

हां, यह काम करता है। -मैक्सडेपथ कुछ पुराने यूनिक्स पर खोजने में लागू नहीं किया गया है। – CCTO

संबंधित मुद्दे