पुनरावर्ती फ़ाइल सूची के लिए गहराई को कैसे सीमित करें?


346

क्या लिनक्स में एक पुनरावर्ती फ़ाइल सूची की गहराई को सीमित करने का एक तरीका है?

फिलहाल मैं जो कमांड इस्तेमाल कर रहा हूं वह है:

ls -laR > dirlist.txt

लेकिन मुझे लगभग 200 निर्देशिकाएं मिली हैं और उनमें से प्रत्येक में 10 निर्देशिकाएं हैं। इसलिए यह अभी बहुत लंबा समय लेने वाला है और बहुत सारे सिस्टम संसाधनों को भी बढ़ा देगा।

मैं वास्तव में दिलचस्पी ले रहा हूं जो पहले स्तर की उपनिर्देशिकाओं के लिए स्वामित्व और अनुमतियों की जानकारी है:

drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin

संपादित करें:

अंतिम विकल्प:

find -maxdepth 2 -type d -ls >dirlist

3
क्या आप भी कुछ ऐसा कर सकते हैं ls -la /var/www/vhosts/*?
केविनो

जवाबों:


494

का -maxdepthझंडा चेक करेंfind

find . -maxdepth 1 -type d -exec ls -ld "{}" \;

यहां मैंने 1 को अधिकतम स्तर की गहराई के रूप में इस्तेमाल किया, -type dइसका मतलब केवल निर्देशिकाएं हैं, जो तब ls -ldलंबे प्रारूप में सामग्री की सूची देता है।


2
चूंकि ओपी स्वयं निर्देशिकाओं की अनुमति जानना चाहता है, इसलिए आपको -dविकल्प जोड़ना चाहिए ls
पीटर वान डेर हाइजेन

@Peter van der Heijden: मैंने सिर्फ findउनकी मुख्य समस्या को हल करने के लिए भाग लिखा है। वैसे भी धन्यवाद मैं इसे जोड़ रहा हूँ।
अल्बर्टो ज़क्काग्नि

3
मैं उपयोग करता हूं -print0और xargs -0बहुत कुछ। उदाहरण:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
क्रिस के

2
अरे हाँ, निश्चित रूप से यह गलत मालूम होता है, हालांकि यह 6 साल पहले नहीं हुआ था: D मैंने पहले ही stackoverflow.com/a/25618630/57095 पर टिप्पणी कर दी है कि यह स्वीकृत उत्तर होना चाहिए।
अल्बर्टो ज़काग्नि

आह, मैक्सडेपथ, क्या कोई गहरा विकल्प है?
सिकंदर मिल्स

95

के findविकल्पों का उपयोग करें

वास्तव में कोई अमल नहीं है /bin/ls जरूरत ;

ढूँढें के पास एक विकल्प है जो ऐसा करता है:

find . -maxdepth 2 -type d -ls

उप-श्रेणियों के केवल एक स्तर को देखने के लिए, जिसमें आप रुचि रखते हैं, -mindepthउसी स्तर पर जोड़ें -maxdepth:

find . -mindepth 2 -maxdepth 2 -type d -ls


आउटपुट स्वरूपण का उपयोग करें

जब दिखाए जाने वाले विवरण अलग-अलग होने चाहिए, तो -printfकस्टम प्रारूप में किसी फ़ाइल के बारे में कोई विवरण दिखा सकता है; प्रतीकात्मक अनुमतियाँ और फ़ाइल के मालिक का नाम दिखाने के लिए, के -printfसाथ %Mऔर %uमें उपयोग करें format

मैंने देखा कि बाद में आप पूरी स्वामित्व जानकारी चाहते हैं, जिसमें समूह शामिल है। %gप्रतीकात्मक नाम के %Gलिए या समूह आईडी के लिए प्रारूप में उपयोग करें (जैसे %Uसंख्यात्मक उपयोगकर्ता आईडी के लिए भी )

find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'

यह आपको केवल सही फ़ाइलों के लिए आपको आवश्यक विवरण देना चाहिए।

मैं एक उदाहरण दूंगा जो वास्तव में उपयोगकर्ता और समूह के लिए अलग-अलग मूल्य दिखाता है:

$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data  www-data /tmp/user/33
drwx------ octopussy root     /tmp/user/126
drwx------ root      root     /tmp/user/0
drwx------ siegel    root     /tmp/user/1000
drwxrwxrwt root      root     /tmp/systemd-[...].service-HRUQmm/tmp

(पठनीयता के लिए संपादित: इंडेंटेड, छोटी लाइन अंतिम)


प्रदर्शन पर नोट्स

हालांकि इस तरह की कमांड के लिए निष्पादन का समय ज्यादातर अप्रासंगिक है, प्रदर्शन में वृद्धि काफी बड़ी है जो इसे इंगित करने के लायक बनाती है:

न केवल हम प्रत्येक नाम के लिए एक नई प्रक्रिया बनाने से बचाते हैं - एक बहुत बड़ा काम - जानकारी को पढ़ने की भी आवश्यकता नहीं है, जैसा कि findपहले से ही जानता है।


9
यह स्वीकृत उत्तर होना चाहिए, जो मेरी तुलना में बहुत बेहतर है।
अल्बर्टो ज़काग्नि

1
@AlbertoZaccagni मुझे लगता है कि हम जल्दी से काम कर पाने के लिए छोटे जवाब पसंद करते हैं।
anddero

65

tree -L 2 -u -g -p -d

2 (-L 2) गहराई तक एक सुंदर प्रारूप में डायरेक्टरी ट्री को प्रिंट करता है। उपयोगकर्ता (-u) और समूह (-g) और अनुमतियां (-p) प्रिंट करें। केवल निर्देशिका (-d) प्रिंट करें। पेड़ के पास कई अन्य उपयोगी विकल्प हैं।


12
वृक्ष प्रेम है। वृक्ष जीवन है।
17

बस tree -L 2 xxx/या tree -L 2 -d xxx/किसी मामले के लिए पर्याप्त है।
एरिक वांग

1

मैं वास्तव में रुचि रखता हूं प्रथम स्तर की उपनिर्देशिकाओं के लिए स्वामित्व और अनुमतियों की जानकारी है।

मुझे अपनी मछली को खेलते समय एक आसान समाधान मिला, जो आपकी ज़रूरत को पूरी तरह से फिट करता है।

ll `ls`

या

ls -l $(ls)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.