लिनक्स डायरेक्टरी में फाइलों को पुन: गिनना


728

मैं लिनक्स निर्देशिका में फ़ाइलों की पुनरावृत्ति कैसे कर सकता हूं?

मुझे मिला:

find DIR_NAME -type f ¦ wc -l

लेकिन जब मैं इसे चलाता हूं तो यह निम्न त्रुटि देता है।

खोजें: रास्तों को अभिव्यक्ति से पहले होना चाहिए: pre


64
आप UNIX पाइपलाइन के लिए उपयोग किए जाने ¦वाले ऊर्ध्वाधर बार |(ASCII 124) के साथ टूटे हुए बार (ASCII 166) को भ्रमित कर रहे हैं ।
स्किप्पी ले ग्रैंड गौरौ

7
@SkippyleGrandGourou क्या इसे पाइप नहीं कहा जाता है?
डेवस्टेफेंस

27
@DaveStephens हाँ, यह भी कहा जाता है। इसे शेफर स्ट्रोक, वर्टिकल-बार, वर्ब, स्टिक, वर्टिकल लाइन, वर्टिकल स्लैश, बार, ओबिलिस्क, ग्लिडस भी कहा जाता है।
इमलाई

64
@ मेनिथ मैं बस इसे बॉब कहता हूं।
क्रिस्टोफर

15
RFC20 में इसे "वर्टिकल लाइन" कहा जाता है। "पाइप" प्रतीक के नाम के बजाय शेल ऑपरेटर का नाम है। बस के रूप *में "तारांकन" ASCII चरित्र है, लेकिन कुछ अन्य संदर्भों में "बार"।
स्लिम

जवाबों:


1325

यह काम करना चाहिए:

find DIR_NAME -type f | wc -l

स्पष्टीकरण:

  • -type f केवल फ़ाइलों को शामिल करने के लिए।
  • |( और नहीं¦ ) कमांड के मानक इनपुट के findलिए wcकमांड के मानक आउटपुट को पुनर्निर्देशित करता है।
  • wc(शब्द गणना के लिए संक्षिप्त) अपने इनपुट ( डॉक्स ) पर नई सूचियाँ, शब्द और बाइट्स गिनता है ।
  • -l सिर्फ नई खबरें गिनने के लिए।

टिप्पणियाँ:

  • वर्तमान फ़ोल्डर में कमांड निष्पादित करने के DIR_NAMEसाथ बदलें .
  • आप -type fगिनती में निर्देशिका (और सहानुभूति) को शामिल करने के लिए भी निकाल सकते हैं ।
  • यह संभव है कि यदि फ़ाइल नाम में नए वर्ण हो सकते हैं तो यह आदेश आगे निकल जाएगा।

आपका उदाहरण काम नहीं करता है:

आपके द्वारा दिखाए गए कमांड में, आप |दो कमांड को जोड़ने के लिए "पाइप" ( ) का उपयोग नहीं करते हैं , लेकिन टूटी हुई बार ( ¦) जिसे शेल कमांड या कुछ समान के रूप में नहीं पहचानता है। इसलिए आपको वह त्रुटि संदेश मिलता है।


26
fमें -type fफ़ाइलों के लिए और खड़ा है wc -lशब्द गणना लाइनों के लिए।
सर्ज स्ट्रोबंड्ट

3
-type fगिनती में निर्देशिका को शामिल करने के लिए निकालें
phatblat

3
-printझंडे की कोई आवश्यकता नहीं है
Zoltán

3
यदि ऐसी कोई संभावना है कि फ़ाइल नामों में नईलाइन वर्ण है तो आप -print0ध्वज का उपयोग करना चाहते हैं ।
gaboroncancio

2
@gaboroncancio जब तक कि कुछ कार्यान्वयन के wcलिए एक शून्य समाप्त सूची को पढ़ने का विकल्प नहीं होता है, तब तक मदद करने वाला नहीं है । एक विकल्प के लिए मेरा जवाब देखें।
मोनिका प्लीज

100

वर्तमान निर्देशिका के लिए:

find -type f | wc -l

5
यह समाधान फ़ाइल नाम नहीं लेता है जिसमें खाते में newlines होते हैं।
कुसलानंद

2
वर्तमान निर्देशिका के लिए, आप भी जरूरत नहीं है.
baptx

1
दरअसल, कुछ प्लेटफार्मों पर, आपको स्पेलिंग करने की जरूरत हैfind .
ट्रिपल

1
@ कुसलानंदरा आपकी टिप्पणी यहाँ लगभग हर उत्तर पर लागू होती है।
ट्रिपल जू

69

यदि आप चाहते हैं कि आपके वर्तमान dir के अंतर्गत प्रत्येक dir में कितनी फाइलें हैं:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

सभी एक लाइन पर जा सकते हैं, बिल्कुल। कोष्ठक स्पष्ट करता wc -lहै कि किसका आउटपुट देखना है ( find $i -type fइस मामले में)।


7
यह उनके नाम पर रिक्त स्थान के साथ निर्देशिकाओं पर अटक सकता है। find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' i ; doइसे ठीक करने के लिए पहली पंक्ति को बदलना । देखें कि मैं एक फ़ाइल (डेटा स्ट्रीम, चर) लाइन-बाय-लाइन (और / या फ़ील्ड-बाय-फ़ील्ड) कैसे पढ़ सकता हूं?
आर्क स्टैंटन

4
findबाहरी लूप का उपयोग करना केवल एक अनावश्यक जटिलता है। for i in */; do`
ट्रिपल जू

समारोह गिनती {$ में मैं के लिए (मिल। -मैक्सडीप 1 -टाइप डी); do file_count = $ ($ i -type f | wc -l ढूंढें); इको "$ file_count: $ i"; किया हुआ }; गिनती | सॉर्ट -n -r
Schneems

अंत में यही मुझे चाहिए था। मेरे फ़ोल्डर में हजारों फाइलें हैं, इसलिए उन्हें पेड़ या किसी अन्य चीज़ से प्रिंट करना एक विकल्प नहीं है
lesolorzanov

यह शामिल है ../ और आगे जाने के लिए प्रतीत नहीं होता है - जिसका अर्थ यह प्रतिगामी नहीं है।
डैनियल लेफेब्रे

50

आप उपयोग कर सकते हैं

$ tree

के साथ पेड़ पैकेज स्थापित करने के बाद

$ sudo apt-get install tree

(एक डेबियन / टकसाल / Ubuntu लिनक्स मशीन पर)।

कमांड न केवल फाइलों की गिनती, बल्कि निर्देशिकाओं की गिनती को भी अलग से दिखाता है। विकल्प -L का उपयोग अधिकतम प्रदर्शन स्तर को निर्दिष्ट करने के लिए किया जा सकता है (जो कि डिफ़ॉल्ट रूप से, निर्देशिका ट्री की अधिकतम गहराई है)।

-aविकल्प की आपूर्ति करके छिपी हुई फ़ाइलों को भी शामिल किया जा सकता है ।


4
यह वास्तव में निर्देशिकाओं और फाइलों की संख्या को देखने का सबसे सरल तरीका है।
लोरम इप्सम डोलर

11
मैन पेज से: डिफ़ॉल्ट रूप से ट्री छिपी हुई फाइलों को प्रिंट नहीं करता है । आपको -aउन्हें शामिल करने के लिए विकल्प की आपूर्ति करनी होगी।
ईव

3
मैकओएस पर इसे स्थापित करने के लिए, उपयोग करें brewऔर चलाएं brew install tree, चलाने के बाद बेहतर brew update
आशीष आहूजा

4
यह सभी फ़ाइलनामों को भी प्रिंट कर रहा है, इसलिए यदि आपके पास कई फाइलें हैं तो यह धीमा हो जाएगा।
फ्रेंक डर्नोनकोर्ट

2
वाह, बहुत अच्छा उपकरण, यह फ़ोल्डरों को प्रिंट कर सकता है, केवल फ़ोल्डर्स की सूची, JSON के रूप में आउटपुट। यह बहुत कम सेकंड में 34k फोल्डर और 51k फाइल्स को सूचीबद्ध कर सकता है। Olé!
ब्रासोफिलो

46

मेरे कंप्यूटर पर, स्वीकृत उत्तर की rsyncतुलना find | wc -lमें थोड़ा तेज़ है :

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

दूसरी पंक्ति में उपरोक्त उदाहरण में फ़ाइलों की संख्या 150,481 है। एक बोनस के रूप में आपको कुल आकार (बाइट्स में) मिलता है।

टिप्पणियों:

  • पहली पंक्ति सभी फाइलों, निर्देशिकाओं, सिम्बलिंक्स आदि की एक साथ गिनती है, इसीलिए यह दूसरी पंक्ति से बड़ी है।
  • --dry-run(या -nछोटे के लिए) विकल्प वास्तव में फ़ाइलों को हस्तांतरण नहीं करने के लिए महत्वपूर्ण है!
  • मैंने -x"फाइल सिस्टम सीमाओं को पार नहीं करने" के विकल्प का उपयोग किया , जिसका अर्थ है कि यदि आप इसके लिए निष्पादित करते हैं /और आपके पास बाहरी हार्ड डिस्क संलग्न हैं, तो यह केवल रूट विभाजन पर फाइलों की गणना करेगा।

मुझे यहाँ rsync का उपयोग करने का आपका विचार अच्छा लगा। मैं इसके बारे में कभी नहीं सोचा था!
Qeole

धन्यवाद @Qeole, हालांकि विचार मेरा नहीं है। मैंने इसे कई साल पहले कहीं पढ़ा था कि rsync बहुत सारी फ़ाइलों और सबफ़ोल्डरों के साथ एक फ़ोल्डर को हटाने के लिए सबसे तेज़ है, इसलिए मैंने सोचा कि फाइलों को गिनने के लिए यह जल्दी से हो सकता है।
Psmith

1
इसकी कोशिश की। Fs कैश को पॉप्युलेट करने के लिए पहले से दो बार दौड़ने के बाद, find ~ -type f | wc -l1.7 / 0.5 / 1.33 सेकंड (वास्तविक / उपयोगकर्ता / sys) लिया। rsync --stats --dry-run -ax ~ /xxx4.4 / 3.1 / 2.1 सेकंड लिया। यह SSD पर लगभग 500,000 फाइलों के लिए है।
स्लिम

डननो ने आपके लिए उपयोग किए जाने वाले rsync के किस संस्करण का उपयोग किया है, लेकिन 3.1.2 में इसे पढ़ना थोड़ा आसान है:Number of files: 487 (reg: 295, dir: 192)
एमपीएन

मैंने rsync version 2.6.9 protocol version 29
macOS

20

चूंकि UNIX में फ़ाइल नाम में नई सुर्खियाँ (हाँ, नया अंक) wc -lहो सकती हैं , इसलिए बहुत सारी फाइलें गिन सकते हैं। मैं हर फाइल के लिए एक डॉट प्रिंट करता हूं और फिर डॉट्स गिनता हूं:

find DIR_NAME -type f -printf "." | wc -c

1
ऐसा लगता है कि यह एकमात्र समाधान है जो फाइलों को उनके नाम में नई सुर्खियों के साथ संभालता है। Upvoted।
कोडफॉस्टर

2
hihi :) मुझे फ़ाइल नाम में नई कहानियाँ पसंद हैं। यह उन्हें और अधिक पठनीय बनाता है।
hek2mgl

मेरा मतलब है, फाइल में नई-पंक्तियों नाम नहीं सामग्री!
कोडफॉस्टर

1
मैं सिर्फ मजाक कर रहा था ... हां, फिल्मनामों में नई कहानियों को हमेशा ध्यान में रखा जाना चाहिए। वे टाइपो से दुर्भावनापूर्ण सामग्री या कम शानदार से आ सकते हैं।
hek2mgl

18

यहां कई उत्तरों को एक साथ मिलाकर सबसे उपयोगी समाधान लगता है:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

यह फ़ाइल नाम जैसी अजीब चीज़ों को संभाल सकता है जिसमें रिक्त स्थान कोष्ठक और यहां तक ​​कि नई लाइनें भी शामिल हैं। यह फ़ाइलों की संख्या के अनुसार आउटपुट को भी सॉर्ट करता है।

-maxdepthउप निर्देशिकाओं को भी प्राप्त करने के बाद आप संख्या बढ़ा सकते हैं। ध्यान रखें कि यह संभवतः एक लंबा समय ले सकता है, खासकर यदि आपके पास उच्च -maxdepthसंख्या के साथ संयोजन में एक अत्यधिक नेस्टेड निर्देशिका संरचना है ।


क्या साथ है echo -e? मुझे लगता है कि आप इसे किसी भी newlines को मोड़ने के लिए डालते हैं, लेकिन यह किसी भी अन्य अनियमित व्हाट्सएप को भी बंद कर देगा, और फ़ाइल नामों में वर्बटीम के किसी भी वाइल्डकार्ड वर्ण का विस्तार करने का प्रयास करेगा। मैं बस कुछ के साथ जाना चाहता हूँ find .* * -type d -execdir sh -c 'find . -type f -printf "\n" | wc -l; pwd'और आउटपुट में किसी भी विपथन के साथ रहता हूं , या हो सकता है printf "%q"कि निर्देशिका नाम प्रिंट करने के लिए बैश के साथ खेलें ।
ट्रिपल जू tri ’१

10

यदि आप जानना चाहते हैं कि वर्तमान वर्किंग डायरेक्टरी से कितनी फाइलें और उप-निर्देशिका मौजूद हैं, तो आप इस वन-लाइनर का उपयोग कर सकते हैं

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

यह GNU फ्लेवर में काम करेगा, और BSD linux (जैसे OSX) के लिए इको कमांड से बस -e को छोड़ देगा।


2
उत्कृष्ट समाधान! एकमात्र मुद्दा जो मुझे मिला वह था रिक्त स्थान या विशेष वर्ण वाली निर्देशिका। उद्धरण जोड़ें जहाँ dir नाम का उपयोग किया जाता है:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find "{}" | wc -l) "{}"' | sort -n
John Kary

1
मैंने इसे थोड़ा संशोधित किया है और यह मेरे लिए बहुत अच्छा काम करता है:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo $(find {} | wc -l) \\t {}' | sort -rn | less
Wizek

@ सेबेस्टियन के उत्तर पर मेरी टिप्पणियाँ यहाँ भी लागू होती हैं। के उपयोग के echo -eएक गैर उद्धृत निर्देशिका नाम पर (या बस `पूर्ववर्ती टिप्पणी के रूप में echo`) किसी अन्य के लिए एक समस्या कारोबार करती है।
ट्रिपल जू

8

यदि आप त्रुटि के मामलों से बचना चाहते हैं, तो wc -lफ़ाइलों को नईलाइनों के साथ देखने की अनुमति न दें (जो इसे 2+ फ़ाइलों के रूप में गिना जाएगा)

उदाहरण एक मामले पर विचार करें जहां हमारे पास एक एकल फ़ाइल है जिसमें एकल ईओएल चरित्र है

> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2

चूँकि कम से कम गन्न में wcशून्य समाप्त सूची (एक फ़ाइल को छोड़कर) को पढ़ने / गिनने का विकल्प नहीं दिखता है, इसलिए सबसे आसान उपाय यह होगा कि इसे फाइलनेम से न गुजारा जाए, लेकिन एक फ़ाइल के मिलने पर हर बार एक स्थिर आउटपुट मिलता है, जैसे। ऊपर के समान निर्देशिका में

> find -type f -exec printf '\n' \; | wc -l
1

या अगर आपका findसमर्थन करता है

> find -type f -printf '\n' | wc -l
1 

7

आप कमांड का उपयोग कर सकते हैं ncdu। यह पुन: गणना करेगा कि लिनक्स निर्देशिका में कितनी फाइलें हैं। यहाँ आउटपुट का एक उदाहरण है:

यहां छवि विवरण दर्ज करें

इसमें एक प्रगति पट्टी है, जो आपके पास कई फाइलें होने पर सुविधाजनक है:

यहां छवि विवरण दर्ज करें

इसे उबंटू पर स्थापित करने के लिए:

sudo apt-get install -y ncdu

बेंचमार्क: मैंने https://archive.org/details/cv_corpus_v1.tar (380390 फाइलें, 11 जीबी) को उस फ़ोल्डर के रूप में उपयोग किया जहां किसी को फाइलों की संख्या गिननी होती है।

  • find . -type f | wc -l: पूरा करने के लिए लगभग 1m20s
  • ncdu: पूरा करने के लिए लगभग 1m20s

यह मुख्य रूप से डिस्क उपयोग की गणना करता है, न कि फाइलों की संख्या। इस अतिरिक्त ओवरहेड की संभावना नहीं है। (मानक POSIX उपयोगिताओं के साथ किया जा सकता है कि कुछ के लिए एक अतिरिक्त पैकेज स्थापित करने की आवश्यकता के अलावा)
hek2mgl

@ hek2mgl यह फाइलों की संख्या की गणना करता है, जैसा कि पहले स्क्रीनशॉट में लाल रंग में दिखाया गया है। मुझे ~ 2 मिलियन फ़ाइलों के लिए कुछ मिनट लगे, इसलिए गति बहुत खराब नहीं है।
फ्रेंक डर्नोनकोर्ट

2
@ hek2mgl मैं जवाब में एक प्रतिलिपि प्रस्तुत करने योग्य बेंचमार्क कहा, मैं इसे दो बार भाग गया और मैं के बीच कोई अंतर नहीं देखा था find . -type f | wc -lऔर ncdu
फ्रेंक डर्नोनकोर्ट

2
हां, ऐसा लगता है कि findकमोबेश उसी सिस्टम कॉल को निष्पादित किया duजा रहा है जिसके लिए बैकएंड है ncdu। बस उन्हें ढांढस बंधाया।
hek2mgl

1
@FranckDernoncourt को बहुत अच्छा लगा। मैं एक फ़ोल्डर में फ़ाइलों के टन है और एक प्रगति पट्टी जीवन रक्षक है। साझा करने के लिए धन्यवाद!
Geek


4

यह निर्धारित करने के लिए कि वर्तमान निर्देशिका में कितनी फाइलें हैं, अंदर डालें ls -1 | wc -l। यह आउटपुट में wcलाइनों की संख्या की गणना करने के लिए उपयोग करता है । यह डॉटफाइल्स की गिनती नहीं करता है। कृपया ध्यान दें कि(-l)ls -1ls -l (जो कि पिछले उदाहरणों में "1" के बजाय "L" है) जो कि मैंने इस HOWTO के पिछले संस्करणों में उपयोग किया था, वास्तव में आपको वास्तविक गणना की तुलना में एक फ़ाइल गणना देगा। इस बात के लिए काम नेजाद को धन्यवाद।

यदि आप केवल फाइलें गिनना चाहते हैं और इसमें सांकेतिक लिंक शामिल नहीं हैं (सिर्फ एक उदाहरण जो आप कर सकते हैं), तो आप उपयोग कर सकते हैं ls -l | grep -v ^l | wc -l(इस बार "L" नहीं "1" है, हम यहां "लंबी" सूची चाहते हैं) । grep"l" (किसी लिंक को दर्शाते हुए) के साथ शुरू होने वाली किसी भी लाइन के लिए चेक, और उस लाइन (-v) को डिस्कस करता है।

सापेक्ष गति: "ls -1 / usr / bin / | wc -l" एक अनलोड 486SX25 (/ usr / बिन / इस मशीन पर 355 फाइलें हैं) पर लगभग 1.03 सेकंड लेता है। " ls -l /usr/bin/ | grep -v ^l | wc -l" लगभग 1.19 सेकंड लगते हैं।

स्रोत: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


2
ls -lstatइसके आकार, माइम और अन्य गुणों को पढ़ने के लिए हर फ़ाइल पर syscall करना चाहिए , जो धीमा है। बड़ी निर्देशिकाओं (100.000+ फ़ाइलों) पर चलने में ls -lकई मिनट लग सकते हैं। इसलिए केवल फाइलों को गिनने के लिए, हमेशा उपयोग करें ls -1 | wc -l
Marki555

एक 486SX25, अच्छा
कैम 8001 1:17

ls -1अभी भी बड़ी निर्देशिकाओं में धीमी हो सकती है, क्योंकि इसमें फाइलों को क्रमबद्ध करना होता है। केवलprintf '%s\n' * एक ही बात करता है, और बाहरी lsकॉल (जो किसी भी तरह से समस्याग्रस्त है ) से बचा जाता है, लेकिन सबसे कुशल सॉल्टन एक कमांड का उपयोग करना है जो किसी भी प्रकार की छँटाई नहीं करता है, जैसे कि find। (ग्लोब आउटपुट शेल द्वारा सॉर्ट किया जाता है।)
ट्रिपल जू

4

यदि आपको किसी विशिष्ट फ़ाइल प्रकार को पुनरावर्ती रूप से गिनना है , तो आप कर सकते हैं:

find YOUR_PATH -name '*.html' -type f | wc -l 

-l बस आउटपुट में लाइनों की संख्या प्रदर्शित करने के लिए है।


विस्तार फ़ाइल नाम का हिस्सा है और
वैक्सहेड

4

बैश के साथ:

() के साथ प्रविष्टियों की एक सरणी बनाएं और # के साथ गिनती प्राप्त करें।

FILES=(./*); echo ${#FILES[@]}

ठीक है कि पुनरावर्ती फ़ाइलों की गणना नहीं करता है, लेकिन मैं पहले सरल विकल्प दिखाना चाहता था। एक फ़ाइल का रोलओवर बैकअप बनाने के लिए एक सामान्य उपयोग का मामला हो सकता है। यह logfile.1, logfile.2, logfile.3 आदि बनाएगा।

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

4+ globstarसक्षम (@tripleee द्वारा उल्लिखित) के साथ पुनरावर्ती गिनती

FILES=(**/*); echo ${#FILES[@]}

फ़ाइलों की गिनती को पुन: प्राप्त करने के लिए हम अभी भी उसी तरह से उपयोग कर सकते हैं।

FILES=(`find . -type f`); echo ${#FILES[@]}

आधुनिक गोले **/*पुनरावर्ती संचय के लिए समर्थन करते हैं। यह अभी भी findबड़ी निर्देशिकाओं की तुलना में कम कुशल है क्योंकि शेल को प्रत्येक निर्देशिका में फ़ाइलों को क्रमबद्ध करना पड़ता है।
ट्रिपल जू

2

नाम में रिक्त स्थान वाली निर्देशिकाओं के लिए ... (ऊपर दिए गए विभिन्न उत्तरों के आधार पर) - फ़ाइलों की संख्या के साथ पुन: निर्देशिका का नाम प्रिंट करें:

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done

उदाहरण (पठनीयता के लिए स्वरूपित):

pwd
  /mnt/Vancouver/Programming/scripts/claws/corpus

ls -l
  total 8
  drwxr-xr-x 2 victoria victoria 4096 Mar 28 15:02 'Catabolism - Autophagy; Phagosomes; Mitophagy'
  drwxr-xr-x 3 victoria victoria 4096 Mar 29 16:04 'Catabolism - Lysosomes'

ls 'Catabolism - Autophagy; Phagosomes; Mitophagy'/ | wc -l
  138

## 2 dir (one with 28 files; other with 1 file):
ls 'Catabolism - Lysosomes'/ | wc -l
  29

निर्देशिका संरचना का उपयोग करके बेहतर कल्पना की जाती है tree:

tree -L 3 -F .
  .
  ├── Catabolism - Autophagy; Phagosomes; Mitophagy/
  │   ├── 1
  │   ├── 10
  │   ├── [ ... SNIP! (138 files, total) ... ]
  │   ├── 98
  │   └── 99
  └── Catabolism - Lysosomes/
      ├── 1
      ├── 10
      ├── [ ... SNIP! (28 files, total) ... ]
      ├── 8
      ├── 9
      └── aaa/
          └── bbb

  3 directories, 167 files

man find | grep mindep
  -mindepth levels
    Do not apply any tests or actions at levels less than levels
    (a non-negative integer).  -mindepth 1 means process all files
    except the starting-points.

ls -p | grep -v /(नीचे उपयोग किया गया) /unix/48492/list-only- अनियमित-files-but-not-directories-in-current-directory पर उत्तर 2 से है

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Catabolism - Lysosomes: 28
./Catabolism - Lysosomes/aaa: 1

तालियां: मैं कई सौ निर्देशिकाओं (अधिकतम गहराई = 1) के बीच अधिकतम फ़ाइलों को ढूंढना चाहता हूं [फिर से नीचे आउटपुट पठनीयता के लिए स्वरूपित]:

date; pwd
    Fri Mar 29 20:08:08 PDT 2019
    /home/victoria/Mail/2_RESEARCH - NEWS

time find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done > ../../aaa
    0:00.03

[victoria@victoria 2_RESEARCH - NEWS]$ head -n5 ../../aaa
    ./RNA - Exosomes: 26
    ./Cellular Signaling - Receptors: 213
    ./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
    ./Stress - Physiological, Cellular - General: 261
    ./Ancient DNA; Ancient Protein: 34

[victoria@victoria 2_RESEARCH - NEWS]$ sed -r 's/(^.*): ([0-9]{1,8}$)/\2: \1/g' ../../aaa | sort -V | (head; echo ''; tail)

    0: ./Genomics - Gene Drive
    1: ./Causality; Causal Relationships
    1: ./Cloning
    1: ./GenMAPP 2
    1: ./Pathway Interaction Database
    1: ./Wasps
    2: ./Cellular Signaling - Ras-MAPK Pathway
    2: ./Cell Death - Ferroptosis
    2: ./Diet - Apples
    2: ./Environment - Waste Management

    988: ./Genomics - PPM (Personalized & Precision Medicine)
    1113: ./Microbes - Pathogens, Parasites
    1418: ./Health - Female
    1420: ./Immunity, Inflammation - General
    1522: ./Science, Research - Miscellaneous
    1797: ./Genomics
    1910: ./Neuroscience, Neurobiology
    2740: ./Genomics - Functional
    3943: ./Cancer
    4375: ./Health - Disease 

sort -Vएक प्राकृतिक प्रकार है। ... तो, उन (Claws मेल) निर्देशिका में से किसी में फ़ाइलों की मेरी अधिकतम संख्या 4375 फाइलें है। यदि मैं बाएं-पैड ( https://stackoverflow.com/a/55409116/1904943 ) उन फाइलनेम - वे सभी संख्यात्मक रूप से नाम दिए गए हैं, प्रत्येक निर्देशिका में 1 से शुरू, और पैड से 5 कुल अंक, मुझे ठीक होना चाहिए ।


परिशिष्ट

एक निर्देशिका में फ़ाइलों, उपनिर्देशिकाओं की कुल संख्या का पता लगाएं।

$ date; pwd
Tue 14 May 2019 04:08:31 PM PDT
/home/victoria/Mail/2_RESEARCH - NEWS

$ ls | head; echo; ls | tail
Acoustics
Ageing
Ageing - Calorie (Dietary) Restriction
Ageing - Senescence
Agriculture, Aquaculture, Fisheries
Ancient DNA; Ancient Protein
Anthropology, Archaeology
Ants
Archaeology
ARO-Relevant Literature, News

Transcriptome - CAGE
Transcriptome - FISSEQ
Transcriptome - RNA-seq
Translational Science, Medicine
Transposons
USACEHR-Relevant Literature
Vaccines
Vision, Eyes, Sight
Wasps
Women in Science, Medicine

$ find . -type f | wc -l
70214    ## files

$ find . -type d | wc -l
417      ## subdirectories

1

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

यह परिमाण lsया findआधारित दृष्टिकोण से अधिक परिमाण का क्रम हो सकता है , लेकिन YMMV।


0

यहाँ कई सही उत्तर हैं। यहाँ एक और है!

find . -type f | sort | uniq -w 10 -c

जहां .देखने के लिए फ़ोल्डर है और 10निर्देशिका को समूहीकृत करने के लिए वर्णों की संख्या है।


-1

find -type f | wc -l

या (यदि निर्देशिका वर्तमान निर्देशिका है)

खोजो। -प्रकार f | wc -l


यह इसी प्रश्न के कम से कम एक अन्य उत्तर को दोहराता है।
कुसलानंद

-1

यह पूरी तरह से ठीक काम करेगा। सरल छोटा। यदि आप किसी फोल्डर में मौजूद फाइलों की संख्या गिनना चाहते हैं।

ls | wc -l

3
सबसे पहले, यह सवाल का जवाब नहीं देता है। सवाल एक निर्देशिका से आगे की फाइलों की पुनरावृत्ति गिनने और आपके द्वारा दिखाई जाने वाली कमांड के बारे में नहीं है। इसके अलावा, ls के साथ आप निर्देशिकाओं और साथ ही फाइलों की गिनती कर रहे हैं। साथ ही, एक पुराने प्रश्न का उत्तर देने का कोई कारण नहीं है यदि आप कुछ नया नहीं जोड़ रहे हैं और प्रश्न को ठीक से पढ़ने भी नहीं जा रहे हैं। कृपया ऐसा करने से बचना चाहिए।
XFCC

-1

प्रारूप के लिए फ़िल्टरिंग के साथ यह वैकल्पिक दृष्टिकोण सभी उपलब्ध ग्रब कर्नेल मॉड्यूल को गिनता है:

ls -l /boot/grub/*.mod | wc -l

-3
ls -l | grep -e -x -e -dr | wc -l 
  1. लंबी सूची
  2. फ़ाइलें और dirs फ़िल्टर करें
  3. फिल्टर्ड लाइन नं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.