आप सभी फ़ाइलों को खोजने की व्यवस्था कर सकते हैं, फ़ाइल नामों को हटा सकते हैं, जिससे आपको प्रत्येक फ़ाइल के लिए सिर्फ निर्देशिका नाम वाली एक पंक्ति छोड़नी होगी, और फिर प्रत्येक निर्देशिका के प्रकट होने की संख्या की गणना करें:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
इसमें केवल गोटा है यदि आपके पास कोई फ़ाइल नाम या निर्देशिका नाम है जिसमें एक नई लाइन वर्ण है, जो काफी संभावना नहीं है। यदि आपको वास्तव में फ़ाइल नाम या निर्देशिका नामों में नई सूचियों के बारे में चिंता करना है, तो मेरा सुझाव है कि आप उन्हें ढूंढ लें, और उन्हें ठीक कर लें ताकि उनमें नई-नई पंक्तियाँ न हों (और चुपचाप अपने तरीके की गलती के दोषी पक्ष को मना लें)।
यदि आप वर्तमान निर्देशिका के प्रत्येक उप-निर्देशिका में फ़ाइलों की गणना में रुचि रखते हैं, किसी भी उप-निर्देशिका में किसी भी फाइल को तत्काल उप-निर्देशिका में फाइलों के साथ गिनना चाहते हैं, तो मैं sed
केवल प्रिंट करने के लिए आदेश को अनुकूलित करूंगा। शीर्ष-स्तरीय निर्देशिका:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
पहला पैटर्न नाम, डॉट, स्लैश, अगले स्लैश और स्लैश तक के नाम को शुरू करता है और लाइन को पहले भाग से बदल देता है, इसलिए:
./dir1/dir2/file1
द्वारा प्रतिस्थापित किया जाता है
./dir1/
दूसरा फाइलों को सीधे वर्तमान निर्देशिका में कैप्चर करता है; उनके पास अंत में एक स्लैश नहीं है, और उन द्वारा प्रतिस्थापित किया जाता है ./
। सॉर्ट और काउंट तब केवल नामों की संख्या पर काम करता है।
./
?