निर्देशिका सूची में फ़ाइल आकार का योग दिखाएं


71

विंडोज dirडायरेक्टरी लिस्टिंग कमांड में अंत में एक लाइन होती है जो सूचीबद्ध फाइलों द्वारा ली गई कुल मात्रा को दिखाती है। उदाहरण के लिए, वर्तमान निर्देशिका की dir *.exeसभी .exeफाइलें, उनके आकार और उनके आकार का कुल योग दिखाता है । मैं अपने dirउर्फ के साथ बैश में समान कार्यक्षमता रखना पसंद करूंगा , लेकिन मुझे यकीन नहीं है कि इसके बारे में कैसे जाना जाए।

वर्तमान में, मेरे पास alias dir='ls -FaGl'है .bash_profile, दिखा रहा है

drwxr-x---+  24 mattdmo  4096 Mar 14 16:35 ./
drwxr-x--x. 256 root    12288 Apr  8 21:29 ../
-rw-------    1 mattdmo 13795 Apr  4 17:52 .bash_history
-rw-r--r--    1 mattdmo    18 May 10  2012 .bash_logout
-rw-r--r--    1 mattdmo   395 Dec  9 17:33 .bash_profile
-rw-r--r--    1 mattdmo   176 May 10  2012 .bash_profile~
-rw-r--r--    1 mattdmo   411 Dec  9 17:33 .bashrc
-rw-r--r--    1 mattdmo   124 May 10  2012 .bashrc~
drwx------    2 mattdmo  4096 Mar 24 20:03 bin/
drwxrwxr-x    2 mattdmo  4096 Mar 11 16:29 download/

उदाहरण के लिए। इस प्रश्न का उत्तर लेते हुए :

dir | awk '{ total += $4 }; END { print total }'

जो मुझे कुल देता है, लेकिन निर्देशिका लिस्टिंग को खुद नहीं छापता है। क्या इसे एक-लाइनर या शेल स्क्रिप्ट में बदलने का कोई तरीका है ताकि मैं किसी भी lsतर्क को पारित कर सकूं dirजिसे मैं पूरी सूची और कुल योग प्राप्त करना चाहता हूं ? उदाहरण के लिए, मैं dir -R *.jpg *.tifसभी उपनिर्देशिकाओं में उन फ़ाइल प्रकारों की लिस्टिंग और कुल आकार प्राप्त करने के लिए दौड़ना चाहूंगा । आदर्श रूप से, यह बहुत अच्छा होगा यदि मुझे प्रत्येक उपनिर्देशिका का आकार मिल सकता है, लेकिन यह आवश्यक नहीं है।


5
ls -lhआपकी मदद क्यों नहीं करता है? यह शीर्ष में कुल योग प्रिंट करता है। आप du -sh *.exeमानव पठनीय रूप में डिस्क स्थान उपयोग जानकारी प्राप्त करने के लिए भी चल सकते हैं ।
बैगवधर

@ वाशविन मुझे नहीं पता कि 'कुल' क्या छाप रहा है ls -lh, लेकिन यह हमेशा इस बात से संबंधित नहीं है कि awkगणना के नीचे की स्क्रिप्ट क्या है , या मैं हाथ से क्या जोड़ता हूं। कभी-कभी यह निर्देशिका में फ़ाइलों की KB की संख्या के करीब है, लेकिन यह उपनिर्देशिकाओं के आबंटित आकारों को प्रभावी रूप में लेने के लिए प्रतीत नहीं होता है। मैं आभारी रहूंगा यदि आप मुझे इस बात की व्याख्या की ओर बता सकते हैं कि वास्तव में वह संख्या क्या है ...
MattDMo

नीचे देखें कि क्या मेरा जवाब आपके लिए काम करता है
बैगवधर

1
ls -lhयह सामग्री की गणना करने वाले एक डीआईआर के आकार का कुल नहीं दिखाता है
Aequalsb

जवाबों:


25

निम्नलिखित फ़ंक्शन आपके द्वारा पूछे जा रहे अधिकांश काम करता है:

dir () { ls -FaGl "${@}" | awk '{ total += $4; print }; END { print total }'; }

... लेकिन यह आपको वह नहीं देगा जो आप से मांग रहे हैं dir -R *.jpg *.tif, क्योंकि यह ls -Rकाम नहीं कर रहा है । आप उसके लिए findउपयोगिता के साथ खेलना चाह सकते हैं ।


1
यह सच है, यदि आप अनिवार्य रूप से प्रत्येक फ़ाइल के सामग्री आकार की तलाश कर रहे हैं, तो डिस्क पर फ़ाइल की खपत का आकार नहीं। यह भेद बहुत छोटी फाइलों के लिए अधिक स्पष्ट है। मेरे डिस्ट्रो के प्रत्येक फ़ाइल को डिस्क पर 4 KB चंक्स में आवंटित किया गया है (इसलिए 300 बाइट फ़ाइल अभी भी डिस्क पर 4K का उपयोग करती है, जैसा कि डु कमांड द्वारा रिपोर्ट किया गया है)। यह देखते हुए कि ओपी "प्रत्येक फ़ाइल को कितनी जगह लेता है" की तलाश कर रहा था, तो डू इसे करने का तरीका है।
जॉन वी

1
dirपहले से ही एक लोकप्रिय ग्नू कोरुटिल का नाम है, मैं इस तरह एक समारोह का नाम नहीं होगा।
मिठाई

कृपया ठीक करें ताकि यह लिनक्स और OS-S दोनों पर काम करे और आपके "-a" में "शामिल हो।" और "..", जो अच्छा नहीं है:) यहाँ निश्चित कमांड है: dir () {ls -FAl "$ {@}" | awk '{कुल + = $ 5; प्रिंट}; END {प्रिंट "कुल:" कुल} '; }
दिमित्री शेव्कोप्लस

148

इसके लिए पहले से ही एक UNIX कमांड है: du

बस करो:

du -ach 

अधिवेशन के अनुसार आप कमांड के अंत में एक या एक से अधिक फ़ाइल या निर्देशिका पथ जोड़ सकते हैं। -hआकार को मानव-अनुकूल प्रारूप में परिवर्तित करने के लिए एक विस्तार है, -aआपको "स्पष्ट" आकार (डिस्क उपयोग के बजाय फ़ाइल का आकार) -cदेता है , और अंत में कुल देता है।


12
हां, डु ठीक काम करता है। सूची के अंत में कुल प्राप्त करने के लिए आप (-total के समान) विकल्प का उपयोग कर सकते हैं।
माइक बी

6
ध्यान दें कि duडिस्क उपयोग देता है, फ़ाइल आकार का योग नहीं।
स्टीफन चेज़लस

7
du -hइसमें दी गई फ़ाइलों के आकार का योग नहीं करता है। du -h *.soप्रत्येक फ़ाइल का आकार दिखाता है, लेकिन योग नहीं। मुझे लगता है कि आप जो चाहते हैं, वह यहां du -hc *.so(या यहां तक du -hc *.so | tail -1) है। लेकिन निश्चित रूप से, वह निर्देशिका लिस्टिंग भी चाहता है।
सीमित प्रायश्चित

1
यह कमांड केवल फाइलों की छोटी सूची के साथ काम करता है। जब आपके पास एक निर्देशिका में 850000 फाइलें हों तो देखें कि क्या होता है !!!
हामिद FzM

3
! -aका मतलब है --all। बल्कि प्रयोग पर विचार करें--apparent-size
Arnauld VM

17

आप उपयोग कर सकते हैं du -h -c directory|tail -1

यह मेमोरी उपयोग के साथ एक सिंगल लाइन उत्पन्न करेगा।


15
du -hs directoryयदि आप केवल कुल चाहते हैं।
स्टीफन चेज़लस


6

पर्ल के साथ:

perl -le 'map { $sum += -s } @ARGV; print $sum' -- *.pdf

वर्तमान निर्देशिका में सभी गैर-छिपी पीडीएफ फाइलों का आकार।


1

निम्नलिखित को .bash_profile या .bashrc में जोड़ना मेरे लिए काम करता है।

dir ()
{
find . -iname "$@" -exec ls -lh {} \;
find . -iname "$@" -print0|xargs -r0 du -csh|tail -n 1;
}

अब जब मैं एक dir * .mp3 करता हूँ तो यह पुनरावर्ती करता है और अंत में कुल प्रिंट करता है। आप अधिकतम मापदण्ड पैरामीटर को जोड़कर कितना गहराई चाहते हैं, इसे नियंत्रित कर सकते हैं। मुझे पता है कि दो बार दौड़ना बहुत ही अच्छा विचार नहीं है। लेकिन मैं बेहतर तरीके से सोच नहीं सका। कम से कम यह काम हो जाता है।


1

डु और एक अजीब कथन का उपयोग करना, जैसा कि ऊपर उल्लेख किया गया है, यह प्रदान करेगा कि आप क्या देख रहे हैं।

उदाहरण: du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'

यह .Jpg में समाप्त होने वाले यूजर एबीसी के फोल्डर डाउनलोड में सभी फाइलों को सूचीबद्ध करेगा और इन सभी फाइलों के योग को सूची के अंत में प्रिंट करेगा।


0

दोनों को प्राप्त करने के लिए, उत्पादन और आकार की गणना, अन्य प्रस्तावित विकल्पों में से किसी का उपयोग किए बिना, आप टी (1) और प्रक्रिया प्रतिस्थापन ... का उपयोग कर सकते हैं

dir | tee >( awk '{ total += $4 }; END { print total }' )

इसके लिए कोई ज़रूरत नहीं है tee, बसdir | awk '{print; total += $4}; END {print total}'
स्टीफन चेज़लस

0
du path_to_your_files/*.jpg | awk '{ total += $1 }; END { print total }'

3
नहीं, पहले, केवल एक आदेश देना एक उत्तर नहीं है। दूसरा, यदि आप पूरे प्रश्न, अन्य उत्तरों और मेरी टिप्पणियों को पढ़ने के लिए परेशान हैं, तो आपने देखा होगा कि यह वह नहीं है जो मैं चाहता हूं।
मैटडामो

पोस्टर के प्रति निष्पक्ष होना, Google खोज के लिए यह पहला खोज परिणाम linux sum human readable sizesहै और मैं वही खोज रहा हूं जो मैं देख रहा हूं।
श्रीधर सरनोबत

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