फ़ोल्डर और उप फ़ोल्डर में फ़ाइलों की संख्या ज्ञात करें?


142

मैं एक फ़ोल्डर और उसके सभी उप फ़ोल्डर्स के तहत फाइलों की संख्या की कुल संख्या का पता लगाना चाहता हूं।

जवाबों:


223

कुछ ऐसा हो सकता है

find . -type f | wc -l

चालबाजी करेगा। मूल फ़ोल्डर से कमांड का प्रयास करें।


3
समाधान उन फ़ाइलों पर विफल हो जाएगा जिनमें नामों में एक नई रेखा है।
उपयोगकर्ता अज्ञात

2
@user अज्ञात:find . -type f -ls | wc -l
व्यवस्था करें

1
और भी तेज:find . -type f -print0 | tr -d -c '\0' | wc -c
व्यवस्था करें

13
@ व्यवस्था: और भी तेज: find . -type f -printf . | wc -c- मैं अपने समाधान के लिए प्रिंट को अपने -ईएक्स ईको के बजाय अपनाता हूं।
उपयोगकर्ता अज्ञात

1
इस आदेश ने मेरे मामले में एक आकर्षण की तरह काम किया, काले जादू की तरह दिखता है
pcko1

27

treeकमांड का उपयोग करें । आपको treeपैकेज स्थापित करने की आवश्यकता हो सकती है ।

यह दिए गए फ़ोल्डर के तहत सभी फाइलों और फ़ोल्डरों को सूचीबद्ध करेगा और अंत में सारांश को सूचीबद्ध करेगा।


14

वर्तमान निर्देशिका के मूल में फ़ाइलों (यहां तक ​​कि एक एक्सटेंशन के बिना फाइलें) की गणना करने के लिए, उपयोग करें:

ls -l | grep ^- | wc -l

फ़ाइलों की गणना करने के लिए (यहां तक ​​कि एक एक्सटेंशन के बिना भी फाइलें) वर्तमान निर्देशिका की जड़ से पुनरावर्ती रूप से, उपयोग करें:

ls -lR | grep ^- | wc -l

1
वे छिपी हुई फाइलों की गिनती नहीं करेंगे।
उपयोगकर्ता अज्ञात

सच। मैं आपके उत्तर को स्वीकार करने और समाधान के रूप में उपयोग करने के लिए इच्छुक हूं।
user38537

13

सबसे तेज़ और आसान तरीका, उपयोग करना है tree। इसकी गति आपके आउटपुट टर्मिनल द्वारा सीमित है, इसलिए यदि आप परिणाम को पाइप करते हैं tail -1, तो आपको तत्काल परिणाम मिलेगा। आप -Lविकल्प का उपयोग करके परिणामों को किस निर्देशिका स्तर पर नियंत्रित कर सकते हैं । रंगीन आउटपुट के लिए, का उपयोग करें -C। उदाहरण के लिए:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

यदि यह पहले से ही नहीं है, तो आप इसे यहाँ प्राप्त कर सकते हैं


9
find -type f -printf . | wc -c

खोज की आउटपुट लाइनों की गिनती न करें, क्योंकि फ़ाइल नाम, जिसमें 99 नईलाइन हैं, 100 फाइलों के रूप में गिना जाएगा।


4
नई लाइनों वाले फ़ाइलनाम एक अविश्वसनीय रूप से दुर्लभ किनारे का मामला है।
असंतुष्टगीतगृह

8
@DisgruntledGoat: तो एक त्रुटि खोजना बहुत कठिन होगा।
उपयोगकर्ता अज्ञात

मुझे एक अच्छा किनारा मामला पसंद है, खासकर कई सालों बाद।
user38537


1

लगता है कि यह पेड़ की तुलना में तेज़ है, इसलिए मैंने नीचे वर्तमान वर्किंग डाइरेक्टरी की प्रत्येक डायरेक्टरी में फाइलों को गिनने के लिए इस्तेमाल किया (सीडब्ल्यूडी में फाइलों को अनदेखा करना), जिससे डाइरेक्ट्री को स्पेस मिल सके।

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done


की पार्स उत्पादन lsहै बहुत बुरा विचार।
स्मारिका

महान कोड, मैं फ़ाइलों की बढ़ती या घटती संख्या में आउटपुट लाइनों को कैसे कह सकता हूं
नाइटक्रॉलर

0

आप उपयोग कर सकते हैं find . | wc -l

find .आपके वर्तमान फ़ोल्डर में शुरू होने वाली सभी फ़ाइलों और फ़ोल्डरों और संपूर्ण सामग्री को सूचीबद्ध करेगा।
wc -lखोज के परिणामों को गिनता है


यह समाधान भी फ़ोल्डरों को गिनता है, मैंने निशान दिया क्योंकि यह मेरे अवसर से मेल खाता था कि मैं उन्हें :) में गिनना नहीं चाहता था
टॉपलेस

समाधान उन फ़ाइलों पर विफल हो जाएगा जिनमें नामों में एक नई रेखा है।
उपयोगकर्ता अज्ञात

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