मैं लिनक्स का उपयोग करके ड्राइव में फ़ोल्डर्स की संख्या कैसे गिन सकता हूं?


24

मुझे बाहरी एचडीडी को व्यवस्थित करने की आवश्यकता है जैसे कि उस पर 500 से अधिक फ़ोल्डर्स नहीं हैं। उबंटू का "गुण" फलक केवल फ़ाइल गणना दिखाता है, न कि फ़ोल्डर गणना।

क्या एक साधारण कमांड लाइन है जो मुझे उपनिर्देशिकाओं की संख्या बताएगी?

मुझे पुनरावर्ती रूप से गिनने की आवश्यकता है, और ड्राइव एक बाहरी एचडीडी है जो घुड़सवार है /media/MUSIC/। यह एक कार स्टीरियो सिस्टम के लिए है जिसका प्रलेखन कहता है कि यह केवल पहले 500 फ़ोल्डरों को पढ़ता है।

जवाबों:


20

अपने ड्राइव पर नेविगेट करें और बस निष्पादित करें

ls -lR | grep ^d | wc -l

यह 3 साल पहले स्वीकार किए गए उत्तर की तुलना में अधिक सही संख्या प्रदान करता प्रतीत होता है। इसने उस निर्देशिका को गिना, जिसमें मैं नहीं था।
डीन राथर

मुझे अलग-अलग संख्याएँ दिखाई देती हैं, लेकिन बहुत अलग नहीं हैं।
एसपीआरबीआरएन

व्यक्तिगत रूप से मैं grep -cओवर पसंद करता हूं wc -l। शायद यह सिर्फ मैं ही हूं।
मैक्सिम_उन

1
यदि किसी निर्देशिका प्रविष्टि में अनुक्रम है \nd(जहाँ \nNL वर्ण है) तो ऊपर ओवरकाउंट होगा ।
टोबी स्पाइट

1
टोबी सही है, lsआउटपुट को पाइप करने की आवश्यकता नहीं है । इसके अलावा यह बहुत धीमा होगा क्योंकि इसे पूरे पेड़ का उत्पादन करना है और फिर इसके माध्यम से जीआरपी चलाना है
phuclv

37

उपनिर्देशिका सहित कुल में सभी फ़ोल्डर खोजें?

find /mount/point -type d | wc -l

... या रूट डायरेक्टरी में सभी फ़ोल्डर खोजें (उपनिर्देशिका सहित नहीं)?

find /mount/point -maxdepth 1 -type d | wc -l

कि पहले एक के बाद मैं क्या कर रहा हूँ। धन्यवाद!
डीन राथर

@ डीन: हाँ, मैंने इसे पहले भी अपने संगीत संग्रह में निर्देशिकाओं की गिनती के लिए इस्तेमाल किया है। :) ब्रागिन के अधिकारों के लिए, अपने MP3s की गणना करें: / माउंट / बिंदु-टाइप करें f | grep -i एमपी 3 | wc -l
quack quixote

1
@Dean: हाँ, मुझे पता नहीं खोजने वाक्य रचना बेतकल्लुफ़, लेकिन मैं आम तौर पर प्रयोग करेंगे ग्रेप -v के लिए कि: खोज / माउंट / पीटी प्रकार च | grep -vi एमपी 3 | grep -vi wav | wc -l ... (और <i> </ i> टिप्पणियों में काम नहीं करता, *foo*italicize का उपयोग करें: foo )
quix quixote

2
@ डीन: मुझे लगता है कि आप सिर्फ find /path -not -iname '*.mp3' | wc -lएमपी 3 को फ़िल्टर करने के लिए उपयोग करेंगे, या MP3 और find /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
WAV

1
फ़ोल्डरों को भी नजरअंदाज करने के लिए इसके लिए -type f जोड़ने की आवश्यकता है , लेकिन बधाई! मुझे अभी m4a फ़ाइलों का एक पूरा गुच्छा मिला है, जिनके बारे में मुझे कोई पता नहीं था ... धन्यवाद!
डीन राथर

4

नई लाइनें निर्देशिका नामों में मान्य वर्ण हैं। मेरा सुझाव है कि findप्रत्येक निर्देशिका के लिए एक खाली लाइन प्रिंट करें और फिर wcउन पंक्तियों को गिनें।

find /mount/point -type d -printf '\n' | wc -l

3

निम्नलिखित प्रयास करें [नीचे देखें]:

ls -1 -p | grep "/" | wc -l

यह वर्तमान निर्देशिका की एक-स्तंभ सूची को प्रिंट करेगा, जो उपनिर्देशिका वाली वस्तुओं के लिए स्लैशिंग के साथ है, फिर स्लैश के साथ लाइनों की गणना करें।

संपादित करें: आपको शायद क्वैक्स क्विकोट के उत्तर के साथ जाना चाहिए, क्योंकि यह थोड़ा अधिक स्पष्ट है, लेकिन मैंने इसे सही किया है (क्वैक के सुझावों को ध्यान में रखने के बाद)।

ls -Rp | grep "/$" | wc -l

पुनरावर्ती जाने के लिए -R जोड़ने की आवश्यकता है (उल्लेख करने में विफल रहने के लिए खेद है), और ls को पथ निर्दिष्ट करने की आवश्यकता है, लेकिन हाँ, यह काम करता है: ls -1 -p -R / media / MUSIC / | grep "/" | wc -l धन्यवाद!
डीन राथर

इस और quixote दोनों के सुझाव को आज़माने के बाद, मुझे 2 अलग-अलग परिणाम मिले ... मैं दूसरे पर विश्वास करने के लिए इच्छुक हूं। फिर भी धन्यवाद!
डीन राथर

1
आपको इसकी आवश्यकता नहीं है -1क्योंकि ls पाइप का पता लगाएगा और कॉलम को प्रारूपित नहीं करेगा। इसके साथ ही आप पुनरावर्ती सूचियों को भी प्राप्त कर सकते हैं -R, लेकिन तब आप शायद "/$"केवल ट्रेलिंग स्लैश (या गिनती बंद हो जाएगी) से मिलान करना चाहते हैं । अंतिम संस्करण:ls -Rp | grep "/$" | wc -l
quixote

1
मैंने जो संस्करण खोजा है , वह अपनी गणना में .(यानी /mount/point) की गणना करेगा, मेरी उपरोक्त टिप्पणी में ls संस्करण नहीं होगा। उन मायने रखता है, 1 से भिन्न होते हैं यद्यपि आप इस्तेमाल कर सकते हैं /mount/point/*में खोज आदेश है कि सही करने के लिए (यह मानते हुए कोई छिपा हुआ डॉट निर्देशिका)।
क्वैककोट

मुझे यकीन नहीं है कि आपको दो अलग-अलग परिणाम क्यों मिले, लेकिन @ quack की विधि में "छिपी हुई" निर्देशिकाएं शामिल होंगी (जैसे। वे जो 'से शुरू होती हैं')।
स्टंटमाउस

1

मैंने विशिष्ट परिस्थितियों में पुनरावर्ती फ़ाइल की गिनती में तेजी लाने के लिए ffcnt लिखा है: घूर्णी डिस्क और फाइल सिस्टम जो मानचित्रण का समर्थन करते हैं।

यह परिमाण lsया findआधारित दृष्टिकोणों की तुलना में अधिक तीव्रता का क्रम हो सकता है


1

जब बड़ी संख्या में निर्देशिकाएं होती हैं, जैसे उपकरण treeसमाप्त होने या यहां तक ​​कि लटका देने के लिए अनंत काल तक ले सकते हैं, इसलिए आप कुछ अधिक कुशल उपयोग करना चाहते हैं।

निर्देशिकाओं की गणना करने का सबसे कुशल तरीका मैं निम्नलिखित के बारे में सोच सकता हूं, क्योंकि findकेवल .पूर्ण पथ और फ़ाइल नाम के बजाय पाए जाने वाले प्रत्येक फ़ोल्डर के लिए एक प्रिंट होगा और wcकेवल वर्णों की संख्या में पुनरावृति करने की आवश्यकता है:

find /mount/point -type d -printf '.' |wc -c

/mount/pointगणना से खुद को बाहर करने के लिए और केवल उप निर्देशिकाओं की गणना करें:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c

1

मैंने du --inodesउपयोगी पाया है, लेकिन मुझे यकीन नहीं है कि इसके किस संस्करण की duआवश्यकता है। Ubuntu 17.10 पर, निम्नलिखित कार्य करता है:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

| sort -nrइनोड की संख्या से अवरोही क्रमबद्ध करने के लिए संयोजित करें ।


0

मुझे डायरेक्टरी काउंट को खींचने के लिए ट्री का इस्तेमाल करना पसंद है

tree -d -R -fi --noreport | wc -l

या, फ़ोल्डरों के थोक दिखाने के लिए बीमार का उपयोग करें के साथ स्थित हैं

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

या कुछ और: पेड़ | grep -e '^। * निर्देशिका,'
माइंडक्राइम

-2

वर्तमान निर्देशिका में फ़ोल्डर्स और निर्देशिका की संख्या खोजने के लिए

अपने टर्मिनल में निम्न कमांड टाइप करें

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