निर्देशिकाओं और उनके उपनिर्देशिकाओं के संक्षेप आकार कैसे प्राप्त करें?


307

मान लीजिए कि मैं लिनक्स फ़ाइल सिस्टम की प्रत्येक निर्देशिका का आकार प्राप्त करना चाहता हूं। जब मैं उपयोग करता ls -laहूं तो मुझे वास्तव में फ़ोल्डरों का संक्षिप्त आकार नहीं मिलता है।

यदि मैं उपयोग करता dfहूं तो मुझे प्रत्येक माउंटेड फ़ाइल सिस्टम का आकार मिलता है लेकिन वह भी मेरी मदद नहीं करता है। और duमुझे प्रत्येक उपनिर्देशिका का आकार और संपूर्ण फ़ाइल सिस्टम का सारांश मिलता है।

लेकिन मैं फ़ाइल सिस्टम के रूट फ़ोल्डर के भीतर प्रत्येक निर्देशिका का केवल संक्षेप आकार रखना चाहता हूं। क्या इसे हासिल करने की कोई आज्ञा है?


--totalध्वज मेरे लिए मददगार था। जैसे du -sh --total applications/*Askubuntu.com/a/465436/48214
रयान

जवाबों:


433

यह वही है जो आप देख रहे हैं:

du -sh /*

इसका क्या मतलब है:

  • -s प्रत्येक कमांड लाइन तर्क के लिए केवल कुल देने के लिए।
  • -hMमेगाबाइट के लिए और Gगीगाबाइट (वैकल्पिक) जैसे मानव-पठनीय प्रत्ययों के लिए ।
  • /*बस सभी निर्देशिकाओं (और फ़ाइलों) में फैलता है /

    नोट: dotfiles शामिल नहीं हैं; shopt -s dotglobउन लोगों को भी शामिल करने के लिए चलाएँ ।

इसके अलावा उपयोगी आकार द्वारा छँटाई है:

du -sh /* | sort -h

यहाँ:

  • -hसुनिश्चित करता है कि sortमानव-पठनीय प्रत्ययों की सही व्याख्या करता है ।

8
यदि आपके पास रूट डायरेक्टरी में डॉट-डायरेक्टरीज़ हैं, तो आप shopt -s dotglobउन्हें काउंट में शामिल करने के लिए उपयोग कर सकते हैं ।
फिलिप

8
यह बहुत उपयोगी है, क्योंकि यह सरल है और आप वर्तमान निर्देशिका में प्रत्येक आइटम के लिए /*उदाहरण के ./लिए या वर्तमान निर्देशिका के बजाय क्या पथ चाहते हैं ./*
psur

3
@psur या आप ./*/केवल सबफ़ोल्डर्स प्राप्त करने के लिए उपयोग कर सकते हैं और सभी आइटम नहीं
relascope

7
सॉर्ट किए गए संस्करण:du -sh /* | sort -h
वू अनह

2
@ c1phr यदि आपके sortपास नहीं है -h, तो आपको इसे बंद करने की आवश्यकता है du, अन्यथा छंटाई किलो / मेगा / गीगाबाइट को मिलाएगी। du -s /* | sort -nr
थॉमस

79

मुझे अक्सर सबसे बड़ी निर्देशिकाओं को खोजने की आवश्यकता होती है, इसलिए एक सॉर्ट की गई सूची प्राप्त करने के लिए 20 सबसे बड़े डायर हैं जो मैं यह करता हूं:

du -m /some/path | sort -nr | head -n 20

इस मामले में आकारों को मेगाबाइट में रिपोर्ट किया जाएगा।


11
यहाँ एक तरीका है इसे और अधिक पठनीय du -sh / some / path | सॉर्ट -हर | सिर -n 20
Xedecimal

6
@Xedecima h का उपयोग करने के साथ समस्या यह है कि विभिन्न आकारों को संभालना नहीं जानता है। उदाहरण के लिए 268K को 255M से अधिक सॉर्ट किया जाता है, और दोनों को 2.7G से अधिक क्रमबद्ध किया जाता है
chrisan

4
'सॉर्ट' कमांड पर -h (मानव पठनीय) तर्क को इन मूल्यों को ठीक से पढ़ना चाहिए। जैसे डु-एच ध्वज उन्हें निर्यात करता है। आप जो चला रहे हैं उसके आधार पर मैं अनुमान लगा रहा हूं।
Xedecimal

उबंटू में काम करता है 16.04। अच्छी टिप।
एसडीसोलर

sudo du -haxt 1G / | सॉर्ट -हर | हेड -30
डेविएंट

22

मैं उस के लिए Ncdu का उपयोग करना पसंद करता हूं , आप निर्देशिका संरचना के माध्यम से नेविगेट करने और ड्रिल करने के लिए उपयोग कर सकते हैं यह वास्तव में अच्छी तरह से काम करता है।


बहुत बढ़िया। कीवर्ड: du ncurses से मिलता है। आप bनिर्देशिका में एक शेल में ड्रॉप करने के लिए उपयोग कर सकते हैं ।
सिरो सेंटिल्ली 新疆 改造 iro 六四

11

मौजूदा उत्तर बहुत मददगार हैं, हो सकता है कि कुछ शुरुआती (मेरे जैसे) भी इस सहायक को पा लेंगे।

  1. बहुत बुनियादी लूप, लेकिन मेरे लिए यह कुछ अन्य आकार से संबंधित कार्यों के लिए एक अच्छी शुरुआत थी:

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. पहले उत्तर के समान और लगभग 1. के परिणाम के समान), लेकिन मुझे उपनिर्देशिका में * से ./* के अंतर को समझने में कुछ समय लगा:

    du -sh ./*
    

for eachयह काम नहीं करता है क्योंकि यह कंसोल पात्रों (जैसे \033[) को फ़ोल्डर्स की सूची में जोड़ता है
machineaddict

@machineaddict यकीन नहीं है कि आप क्या मतलब है। मैं हर समय इसका उपयोग करता हूं, मेरे लिए ठीक काम करता है।
मार्टिन

अपने कमांड को शुरू करने की कोशिश करें for each। यह काम नहीं करेगा
machineaddict

मैं यहाँ पर जैसा लिखा है ठीक वैसा ही कमांड चलाता हूँ। प्रत्येक के लिए शुरुआत। काम करता है।
मार्टिन

7

निम्नलिखित duआह्वान को बीएसडी सिस्टम पर काम करना चाहिए:

du -d 1 /

1
मेरे du(Ubuntu 10.4) के पास कोई -dविकल्प नहीं है । आप किस सिस्टम पर हैं?
थॉमस

मेरे खुले तौर पर इसका कोई विकल्प नहीं है :(
2ndkauboy

ठीक है, तो यह केवल बीएसडी विकल्प है (मैं ओएस एक्स पर हूं)।
फिलिप

BSD / * NIX पर सही पोर्टेबल विकल्प संयोजन है du -sk /*। मुझे -kसामान से बहुत नफरत है। लिनक्स ' -hपूरी तरह से चट्टानों।
डमी ००००००१

अन्य प्रणालियों में, इसका--max-depth
विष्णु कुमार

4

यह आसान नहीं है। duआदेश या तो फ़ाइलों और फ़ोल्डरों (डिफ़ॉल्ट) या बस सभी आइटम जो आप कमांड लाइन (विकल्प के समय इसका उल्लेख के आकार से पता चलता -s)।

लिनक्स पर मानव पठनीय आकारों के साथ, सबसे बड़ी वस्तुओं (फ़ाइलों और फ़ोल्डरों) को प्राप्त करने के लिए:

du -h | sort -h

यह आपको एक टन छोटी फाइलों में दफन कर देगा। आप उनसे छुटकारा पा सकते हैं --threshold(मेरे उदाहरण में 1 एमबी):

du --threshold=1M -h | sort -h

इस कमांड का लाभ यह है कि इसमें छिपे हुए डॉट फ़ोल्डर्स (फ़ोल्डर जो शुरू होते हैं .) शामिल हैं।

यदि आप वास्तव में केवल फ़ोल्डर्स चाहते हैं, तो आपको उपयोग करने की आवश्यकता है findलेकिन यह बहुत धीमी गति से duहो सकता है, क्योंकि कई बार कई फ़ोल्डरों को स्कैन करना होगा:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h

1
--threshold ^ ^ ^ यह विकल्प linux पर उपलब्ध नहीं है
podarok

1
@podarok यह OpenSUSE 13.2 लिनक्स पर उपलब्ध है। अपने वितरण के अधिक हाल के संस्करण को खोजने का प्रयास करें या पैकेज के अधिक हाल के संस्करण को स्वयं संकलित करें।
हारून डिगुल्ला

यह Ubuntu LTS (14.04) पर काम नहीं करता है। यह सबसे हाल का है))
podarok

@ पोड्रोक जीएनयू कोरुटिल्स का कौन सा संस्करण है? मेरा 8.24 है।
हारून डिगुल्ला

1
कैशिंग एक बुरा शब्द हो सकता है। मैं इस पोर्ट सुपरयूज़र.com/a/597173/121352 में किए गए कुछ के बारे में सोच रहा था जहां हम डिस्क सामग्री को एक बार मैपिंग में स्कैन करते हैं और फिर डिस्क को फिर से चलाने के बजाय उस मैपिंग से डेटा का उपयोग करना जारी रखते हैं।
हेन्स

1

ध्यान रखें, कि आप duविभिन्न प्रणालियों / मशीनों पर निर्देशिकाओं की तुलना सुनिश्चित किए बिना नहीं कर सकते हैं , दोनों ही फाइलसिस्टम के समान अवरोधक को साझा करते हैं। यदि आप किसी linux मशीन से nas में कुछ फ़ाइलों को rsync करते हैं और आप अपने आप ही सिंक की गई निर्देशिका की तुलना करना चाहते हैं, तो इसकी गणना कर सकते हैं। अलग- duअलग ब्लॉकेज के कारण आपको अलग-अलग परिणाम मिल सकते हैं ...।


0

तुम भी xdiskusage की जाँच करना चाहते हो सकता है । आपको वही जानकारी देगा, लेकिन चित्रमय रूप से दिखाया गया है, प्लस नीचे (बहुत उपयोगी) ड्रिल करने की अनुमति देता है। केडीई और यहां तक ​​कि विंडोज के लिए अन्य समान उपयोगिताओं हैं।


0

आप lsके साथ संयोजन के रूप में उपयोग कर सकते हैं awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

के आउटपुट lsको पाइप किया जाता है awkawkडेटा को संसाधित करना शुरू करता है। मानक सीमांकक अंतरिक्ष है। योग चर totशून्य से प्रारंभ होता है; निम्न कथन द्वारा निष्पादित प्रत्येक पंक्ति / पंक्ति के लिए निष्पादित किया जाता है ls। यह केवल totआकार के साथ वेतन वृद्धि करता है। $5पांचवें स्तंभ के लिए खड़ा है (द्वारा उत्पादित ls)। अंत में हम मेगाबाइट में योग करने के लिए (1024 * 1024) से विभाजित करते हैं।

यदि आप इसे एक स्क्रिप्ट या फ़ंक्शन (.bashrc) में परिवर्तित करेंगे, तो आप इसका उपयोग निर्देशिकाओं के कुछ सबसेट के आकार को प्राप्त करने के लिए भी कर सकते हैं।

यदि आप सिस्टम की विस्तृत जानकारी चाहते हैं, तो kdirstatकाम आ सकता है!


मैं मानता हूं कि कोई भी इस उदाहरण का विस्तार कर सकता है और "कुछ विशेष प्रकार की निर्देशिकाओं का आकार प्राप्त कर सकता है, जैसे कि फ़िलिपेट्स के अनुसार" आदि; यह एक अच्छा शुरुआती बिंदु लग सकता है। फिर भी यह समाधान शुरू से ही त्रुटिपूर्ण है। प्रत्येक उपयोगकर्ता जो इस पद्धति का उपयोग करना चाहते हैं, मैं इस प्रश्न के उत्तर और टिप्पणियों के साथ-साथ वहां से जुड़े लेख को पढ़ने की सलाह देता हूं । मैं नहीं कहता कि आप इसे बिल्कुल नहीं कर सकते। सीमाओं को जानें, बस इतना ही।
कामिल मैकियोरोस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.