मुझे कमांड-लाइन से लिनक्स या मैक ओएस एक्स निर्देशिका का आकार कैसे मिलता है? [डुप्लिकेट]


74

लिनक्स या मैक ओएस एक्स निर्देशिका में सभी फ़ाइलों (पुनरावर्ती) के आकार को खोजने के लिए मैं किस कमांड का उपयोग करता हूं?


2
आप -k1K-byte के ब्लॉक आकार का उपयोग करने के लिए विकल्प का उपयोग कर सकते हैं
जोकर

मैं सिर्फ डिस्क इन्वेंटरी एक्स नामक इस मुफ्त सॉफ्टवेयर की सिफारिश करना चाहता हूं। इसे यहां डाउनलोड करें derlien.com मैक
ओएसएक्स के

इसके बजाय du, मैं उपयोग करता हूं ncdu, आप यहां संदर्भ देख सकते हैं, remysharp.com/2018/08/23/cli-improved
एलन डोंग

जवाबों:


82

duओएस एक्स में प्रयुक्त बीएसडी संस्करण 512-बाइट ब्लॉकों के साथ आकार की रिपोर्ट करता है - आकार अनिवार्य रूप से अगले 512-बाइट मान तक गोल होते हैं। यह आपको डिस्क पर जगह बताता है, जो डेटा की मात्रा से बड़ा है। यदि आपके पास बहुत सारी छोटी फाइलें हैं, तो अंतर बड़ा हो सकता है।

यहाँ एक उदाहरण है।

यह नियमित के साथ मूल्य है du। यह 512-बाइट ब्लॉक में है:

$ du -s
248   .

-hअधिक पठनीय संख्या में झंडा परिणाम, किलोबाइट में। जैसी कि उम्मीद थी, यह 512-बाइट ब्लॉक की आधी संख्या है:

$ du -hs
124K  .

अंत में, आप उपयोग कर सकते हैं findऔर awkआप फ़ाइलों में वास्तविक बाइट्स की राशि देने के लिए। यह धीमा है, लेकिन यह काम करता है:

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

यह मान फाइंडर के गेट इन्फो विंडो द्वारा बताई गई संख्या से बिल्कुल मेल खाता है। (फ़ाइलों के इस सेट में कोई अजीब कांटे या xattrs नहीं हैं।) यह उनके द्वारा बताए गए मूल्य से काफी छोटा है du

यहां बताया गया है कि यह कैसे काम करता है: इसे सभी फाइलों की एक सूची मिलती है, और उन्हें पास किया जाता है ls -l; तब awkबाइट्स को गिनने के लिए उपयोग किया जाता है। -type fताकि केवल फ़ाइलें (और नहीं निर्देशिका) को भेजा झंडा है ls। कि झंडा के बिना, यह भी निर्देशिका नाम पर भेज देंगे lsनिर्देशिका में एक आइटम के रूप में एक बार एक व्यक्ति फ़ाइल के रूप में, और एक बार:, और प्रत्येक फ़ाइल दो बार सूचीबद्ध किया जाएगा।

GNU संस्करण duब्लॉक के बजाय वास्तविक बाइट्स में मान दे सकता है। यह दुर्भाग्यपूर्ण है कि बीएसडी संस्करण duउतना लचीला नहीं है।


महान व्याख्या। दिलचस्प है duकि -bविकल्प के साथ जीएनयू कोर्यूटिल्स का उपयोग करते समय मुझे आपके findपाइप की तुलना में एक अलग परिणाम मिलता है । 36 जीबी निर्देशिका के लिए मुझे 82 केबी का अंतर मिलता है।
स्टेफेन श्मिट

वहाँ एक और अधिक मानव पठनीय प्रारूप में इसे मुद्रित करने के लिए कोई रास्ता नहीं है?
आनन ५58१

75

किसी एकल फ़ाइल का आकार दिखाएं

du -h path_to_a_file

किसी निर्देशिका की सामग्री, प्रत्येक उप-निर्देशिका और प्रत्येक व्यक्तिगत फ़ाइल का आकार दिखाएं:

du -h path_to_a_directory

निर्देशिका की सामग्री का आकार दिखाएं:

du -sh path_to_a_directory


25
du -schयदि आप कुछ और आसानी से पठनीय चाहते हैं।
जॉय

@ जोहान्स, मुझे लगता है कि आपको इस टिप्पणी को उत्तर के रूप में पोस्ट करना चाहिए, इसलिए इसे स्वीकार किया जा सकता है?
अर्जन

मुझे -c विकल्प निरर्थक लगता है (कम से कम मैक ओएस एक्स पर) और डु -श उप-सूक्तियों को दबाता है।
डेरिल स्पिट्जर

अहा, मुझे नहीं पता था कि कोई भी खुद के जवाब को स्वीकार कर सकता है। अब कम से कम लोगों को पता है कि सवाल हल हो गया है।
अर्जन

मैं ख़ुशी के साथ एक नए उत्तर को स्वीकार करूँगा जो कि मेरा सुधार है।
डेरिल स्पिट्जर

9

डु - डिस्क का उपयोग करता है फ़ाइल आकार नहीं बताता है ।

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

ऊपर टर्मिनल कोड (osx 10.6 पर im) मेरे लिए सबसे अच्छा परिणाम प्रदान करता है और "फाइंड ... -टेक्स" की तुलना में तेज़ है

एक त्वरित बेंचमार्क

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s

यदि आप उबंटू पर ऐसा ही करना चाहते हैं:find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
रॉड्रिगो पोलो

क्या मानव-पठनीय प्रारूप में इस परिणाम को प्राप्त करने का कोई तरीका है?
अनोन ५

5

आप उपयोग कर सकते हैं du -ah .जो सभी फ़ाइलों और निर्देशिकाओं के आकारों को पुनरावर्ती रूप से प्रदर्शित करता है।

इसे साथ जोड़ा जा सकता है sort, इसलिए आपको वर्तमान फ़ोल्डर में शीर्ष -20 सबसे बड़ी निर्देशिकाएं दिखाई देंगी:

du -ah . | sort -rh | head -20

नोट: विकल्प -hके लिए sortOSX / बीएसडी पर उपलब्ध नहीं है, तो आप स्थापित करने के लिए है sortसे coreutils(उदाहरण के लिए के माध्यम से brew) और बिन पथ पर लागू होते हैं PATH, जैसे

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

अन्यथा उपयोग करें:

du -a . | sort -rn | head -20

पहला कमांड मेरे macOS 10.12.1 #du -ah पर काम नहीं करता है। | sort -rh | हेड -20 सॉर्ट: अमान्य विकल्प - h अधिक जानकारी के लिए `सॉर्ट - हेल्प 'आज़माएं।
न्यूक्लियक्स

2
@nucleartux कमांड के नीचे नोट की जाँच करें। यह GNU सॉर्ट में काम करता है जिसे आप macOS पर इनस्टॉल कर सकते हैं: brew install coreutilsअन्यथा बिना अंत में BSD सॉर्ट कमांड का उपयोग करें -h
केनोरब

2

मैंने आपके सभी अभिग्रहों को जोड़ दिया और इसे मानव पठनीय आउटपुट के साथ जोड़ दिया, जिसका परिणाम है:

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

जिस्ट से लिंक करें: https://gist.github.com/mlegenhausen/9365461

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