पुनरावृत्ति के बिना खोजें


246

क्या findकिसी तरह से कमांड का उपयोग करना संभव है जो उप-निर्देशिकाओं में पुनरावृत्ति नहीं करेगा? उदाहरण के लिए,

DirsRoot
  |-->SubDir1
  |    |-OtherFile1
  |-->SubDir2
  |    |-OtherFile2
  |-File1
  |-File2

और जैसी चीज का परिणाम find DirsRoot --donotrecuourse -type fहोगा वैसा ही होगा File1, File2?

जवाबों:


380

मुझे लगता है कि आप -maxdepth 1अपनी वर्तमान कमांड संरचना के आधार पर विकल्प के साथ जो चाहते हैं वह आपको मिलेगा । यदि नहीं, तो आप को देखने का प्रयास कर सकते हैं आदमी पेज के लिएfind

प्रासंगिक प्रविष्टि (सुविधा के लिए):

-maxdepth levels
          Descend at most levels (a non-negative integer) levels of direc-
          tories below the command line arguments.   `-maxdepth  0'  means
          only  apply the tests and actions to the command line arguments.

आपके विकल्प मूल रूप से हैं:

find DirsRoot/* -maxdepth 0 -type f #This does not show hidden files

या:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files

ओपी के उदाहरण के लिए मुझे लगता है कि यह होना चाहिए -maxdepth 1?
पॉल आर

@Paul R: वास्तव में, यह इस बात पर निर्भर करता है कि वह छिपी हुई फ़ाइलों को कैसे संभालना चाहता है, लेकिन फिर भी मैंने अपने उत्तर में संशोधन किया है। उनके उदाहरण के 1लिए शायद वही है जो वह चाहते हैं।
एल्डारैथिस

1
मेरे लिए, कोई फ़ाइल -maxdepth 0नहीं दिखा रहा है , लेकिन जैसा कि छिपी हुई फ़ाइलों के साथ प्रदर्शित किया जा रहा है, वैसे ही काम कर रहा है। -maxdepth 1
ब्रूस वेन

1
@BruceWayne ध्यान दें *में find DirsRoot/* -maxdepth 0 -type f। यदि आप इसे छोड़ देते हैं, तो यह कोई फाइल नहीं दिखाएगा।
मानचित्रकार

@ मूक, धन्यवाद, लेकिन मैं उस मूल संदर्भ को याद नहीं कर सकता, जिसमें मेरा यह मुद्दा था, हाहा।
ब्रूस वेन

33

मुझे विश्वास है कि आप ढूंढ रहे हैं -maxdepth 1


1
ओपी के उदाहरण के लिए मुझे लगता है कि यह होना चाहिए -maxdepth 1?
पॉल आर

हां, यदि वह अपने उदाहरण में ठीक उसी तरह कमांड का उपयोग कर रहा है तो यह होगा 1. मेरी गलती।
वफ़ल विरोधाभास

17

यदि आप POSIX अनुरूप समाधान खोजते हैं:

cd DirsRoot && find . -type f -print -o -name . -o -prune

-Maxdepth POSIX अनुरूप विकल्प नहीं है।


इस समाधान के लिए धन्यवाद, लेकिन क्या इसे सरल नहीं किया जा सकता है find DirsRoot/* -type f -prune?
डोकसपर

@dokaspar वास्तव में महान सवाल! (आप -prunebtw से पहले "-o" डालना भूल गए ) उत्तर नहीं है, यह नहीं हो सकता। इसे पूरी तरह से समझने के लिए इसे सरल नहीं बनाया जा सकता है, बस इसे छोड़ने set -xसे पहले कमांड का उत्सर्जन करें find DirsRoot/* -type f -o -pruneऔर आप तुरंत इसे स्वयं देखेंगे। मूल कारण DirsRoot/*अभिव्यक्ति के खोल विस्तार की सीमाएं हैं ।
sqr163

सेंटो पर काम नहीं कर रहा है, फिर भी आउटपुट पर पूर्ण पुनरावृत्ति कर रहा है !!!! उचित आदेश हैfind . -name . -o -prune
Reishin

वैसे भी सोलारिस पर, DirsRoot को वांछित पथ के साथ रखते हुए, आपको cd की आवश्यकता नहीं है; इसके बजाय, आप कर सकते हैं: DirsRoot / खोजें। -type f -print -o -name। -ओ -पुर्णे
उपद्रवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.