जीएनयू du
(यानी गैर-एम्बेडेड लिनक्स या सिग्विन पर) के साथ, आप उन --exclude
फ़ाइलों को बाहर करने के लिए विकल्प का उपयोग कर सकते हैं जिन्हें आप मिलान नहीं करना चाहते हैं।
du -s --exclude='*.html' /var/foo
यदि आप *.pdf
फ़ाइलों को सकारात्मक रूप से मेल खाना चाहते हैं , तो आपको फ़ाइलों को सूचीबद्ध करने के लिए किसी अन्य विधि का उपयोग करना du
होगा , और कम से कम प्रति तर्क एक आउटपुट लाइन, और विकल्प के साथ एक भव्य कुल प्रदर्शित करना होगा -c
। आप tail
"कुल" शब्द को हटाने के लिए सभी लेकिन अंतिम पंक्ति या sed को हटाने के लिए कॉल कर सकते हैं । उस एक निर्देशिका में फ़ाइलों की गणना करने के लिए, शेल में वाइल्डकार्ड का उपयोग करें।
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
यदि आपको उप-प्रकारों में फ़ाइलों को ट्रैवस करने की आवश्यकता है, तो find
एक **/
पैटर्न का उपयोग करें , या उपयोग करें यदि आपका शेल समर्थन करता है। के लिए **/
, बैश में, पहले चलाएं shopt -s extglob
, और ध्यान दें कि 4.2 तक के संस्करण को बैश कर दिया जाएगा, जो निर्देशिकाओं के प्रतीकात्मक लिंक को आगे बढ़ाएगा; zsh में, यह बॉक्स से बाहर काम करता है।
du -sc /var/foo/**/*.pdf | tail -n1
खोज संस्करण के साथ एक अतिरिक्त जटिलता यह है कि यदि बहुत अधिक फाइलें हैं, तो कमांड लाइन की लंबाई सीमा के तहत रखने के लिए एक से अधिक बार find
चलेंगे du
। वाइल्डकार्ड विधि के साथ, यदि ऐसा होता है, तो आपको एक त्रुटि मिलेगी ("कमांड लाइन की लंबाई सीमा पार हो गई")। निम्न कोड मानता है कि आपके पास कोई मेल फ़ाइल नाम नहीं है जिसमें एक नई रेखा है।
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
?