कैसे `du` कमांड द्वारा विशेष एक्सटेंशन के केवल कुल फ़ाइल आकार दिखाने के लिए


11

मेरे पास एक निर्देशिका में सैकड़ों पीडीएफ फाइलें और HTML फाइलें हैं। और मैं पीडीएफ फाइलों का कुल आकार जानना चाहता हूं।

कमांड द्वारा du -ch /var/fooमैं कुल फ़ाइल आकार देख सकता हूं लेकिन मुझे केवल अंतिम पंक्ति, कुल आकार की आवश्यकता है।

यदि निर्देशिका में केवल पीडीएफ फाइलें हैं तो मैं -sविकल्प का उपयोग कर सकता हूं , लेकिन इस बार विकल्प का उपयोग नहीं किया जा सकता है।

मैं केवल विशेष फ़ाइल प्रकार का कुल आकार कैसे प्राप्त कर सकता हूं?


आप की तरह उपयोग नहीं कर सकते du -sh /foo/*.pdf?
बैगवधर

2
du -ch /var/foo/*.pdf | tail -n 1
don_crissti

जवाबों:


10

जीएनयू 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}'

(शायद व्यवहार में कोई मुद्दा नहीं है, लेकिन ध्यान दें कि --exclude='*.html'कारण /var/foo/dir.html/foo.pdfनहीं गिना जाएगा क्योंकि बहिष्करण भी निर्देशिका ट्रैवर्सल को प्रभावित करते हैं; साथ ही, निर्देशिकाओं के डिस्क उपयोग का /var/fooभी हिसाब होगा)
स्टीफन चेज़लस

3

आप शेल को फ़ाइलों का विस्तार करने दे सकते हैं:

$ mkdir foo
$ echo "abc" > foo/1.pdf
$ echo "abcd" > foo/2.pdf
$ echo "abcd" > foo/3.html
$ du -ch foo/*.pdf
4,0K    foo/1.pdf
4,0K    foo/2.pdf
8,0K    total

हालाँकि जैसा कि आप देख सकते हैं कि यह इंडीकेट्स लगभग 1000 बार की गई फाइलों को सिर्फ बनाया गया है। एक बेहतर विकल्प विकल्प का उपयोग कर रहा -bहै:

$ du -cbh foo/*.pdf
4   foo/1.pdf
5   foo/2.pdf
9   total

बड़ी फ़ाइलों को अभी भी मानव पठनीय रूप में प्रदर्शित किया जाएगा - उदाहरण के लिए 173K


duप्रत्येक फ़ाइल का डिस्क उपयोग दिखाता है (अधिकांश फाइल सिस्टम पर, यह फ़ाइल आकार गोल आकार के अगले कई तक होता है)। विकल्प के साथ -b, duप्रत्येक फ़ाइल का आकार दिखाता है।
गाइल्स का SO- बुराई पर रोक '22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.