Find -maxdepth 0 मुझे कोई आउटपुट नहीं दे रहा है


18

मैं समझने की कोशिश कर रहा हूं कि find -maxdepth 0विकल्प का उपयोग कैसे करें ।

मैं नीचे निर्देशिका संरचना है।

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

अब, मैं findनीचे के रूप में अपनी कमांड निष्पादित करता हूं ।

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

उपरोक्त findआदेशों में से कोई भी साथ , file1 वापस आ जाता है।

मैन पेज से find, मैं नीचे दी गई जानकारी देख रहा हूं।

-maxdepth 0 का अर्थ केवल परीक्षण और कार्यों को कमांड लाइन के तर्कों पर लागू करना है।

मैंने -maxdepth 0विकल्प के साथ कुछ उदाहरण खोजे और कोई भी उचित उदाहरण नहीं मिला।

मेरा findसंस्करण है,

find --version
find (GNU findutils) 4.4.2

क्या कोई मुझे कुछ संकेत प्रदान कर सकता है कि किन मामलों में -maxdepth 0विकल्प उपयोगी होगा?

संपादित करें

जब मैं नीचे दिए गए कमांड को निष्पादित करता हूं, तो मुझे फ़ाइल 1 को दो बार सूचीबद्ध किया जाता है। क्या इस तरह से काम करने का इरादा है?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

जवाबों:


26

मान लीजिए कि हमारे पास file1वर्तमान निर्देशिका में है। फिर:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

अब, देखते हैं कि दस्तावेज क्या कहते हैं:

-maxdepth 0 का अर्थ केवल परीक्षण और कार्यों को कमांड लाइन के तर्कों पर लागू करना है।

ऊपर मेरे पहले उदाहरण में, केवल निर्देशिका .को कमांड लाइन पर सूचीबद्ध किया गया है। चूंकि .नाम file1नहीं है, इसलिए आउटपुट में कुछ भी सूचीबद्ध नहीं है। ऊपर मेरे दूसरे उदाहरण में, दोनों .और file1कमांड लाइन पर सूचीबद्ध और, कर रहे हैं क्योंकि file1मैचों -name "file1", यह उत्पादन में वापस आ गया था

दूसरे शब्दों में, का -maxdepth 0अर्थ है निर्देशिका या उपनिर्देशिका नहीं खोजें। इसके बजाय केवल कमांड लाइन पर स्पष्ट रूप से सूचीबद्ध लोगों के बीच एक मिलान फ़ाइल देखें।

आपके उदाहरणों में, केवल निर्देशिका को कमांड लाइन पर सूचीबद्ध किया गया था और उनमें से कोई भी नाम नहीं था file1। इसलिए, कोई आउटपुट नहीं।

सामान्य तौर पर, कई फाइलों और निर्देशिकाओं को कमांड लाइन पर नामित किया जा सकता है। उदाहरण के लिए, यहां हम findकमांड लाइन पर 11 फाइलों और निर्देशिकाओं के साथ कमांड का प्रयास करते हैं :

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

ओवरलैपिंग पथ

विचार करें:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

जाहिरा तौर पर, जैसा कि रमेश बताते हैं, findकमांड लाइन पर निर्दिष्ट प्रत्येक पथ का अनुसरण करेंगे और मैच की तलाश करेंगे भले ही पथ एक ही फ़ाइल की ओर जाते हैं, जैसे कि . fileया भले ही पथ बिल्कुल डुप्लिकेट हों, जैसे कि file1 file1


धन्यवाद। लेकिन मैं कमांड लाइन पर कुछ फ़ाइल नाम कैसे पारित कर सकता हूं?
रमेश

अच्छी बात। देखिये मेरा अपडेटेड जवाब। पहले टेस्ट से पहले आप जितना चाहें उतना डाल सकते हैं। उदाहरण के लिए find * -maxdepth 0 -name "file1":। *कमांड लाइन पर मौजूदा निर्देशिका में हर फ़ाइल सूची जाएगा।
जॉन 1024

1
@ रमेश उत्तर फिर से अपडेट किया गया, मुझे आशा है, बेहतर स्पष्टीकरण और उदाहरण।
जॉन 1024

एक बार फिर धन्यवाद। मैंने आपके नवीनतम अपडेट से अधिक विवरण के साथ अपना प्रश्न अपडेट किया।
रमेश

@ रमेश मैं इसे प्रलेखित नहीं कर सकता, लेकिन मैं वही व्यवहार देखता हूं जो आप करते हैं: findकमांड लाइन पर प्रत्येक पथ को देखता है और प्रत्येक पर रिपोर्ट मेल खाता है, भले ही वे डुप्लिकेट हों।
जॉन 1024
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.