سؤال كيف يمكنني الحصول على حجم دليل Linux أو Mac OS X من سطر الأوامر؟ [مكرر]


هذا السؤال لديه بالفعل إجابة هنا:

ما هو الأمر الذي أستخدمه للعثور على حجم جميع الملفات (بشكل متكرر) في دليل Linux أو Mac OS X؟


67
2017-08-13 20:00


الأصل


يمكنك استخدام -k خيار استخدام حجم كتلة 1K بايت - Zoker
أريد فقط أن أوصي بهذا البرنامج المجاني المسمى Disk Inventory X. قم بتنزيله هنا derlien.com انها سهلة الاستخدام لماك osx - Nimitack
بدلا من du، أنا أستعمل ncdu، يمكنك العثور على المرجع هنا ، remysharp.com/2018/08/23/cli-improved - Alan Dong


الأجوبة:


إصدار BSD من du تستخدم في حجم تقارير OS X مع كتل 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

تتطابق هذه القيمة تمامًا مع الرقم الذي تم الإعلام عنه من خلال نافذة Find Find Get. (لا توجد شوكات غريبة أو xattrs في هذه المجموعة من الملفات). إنها أصغر بكثير من القيمة التي تم الإبلاغ عنها بواسطة du.

وإليك كيفية عمله: فهو يحصل على قائمة بجميع الملفات ، ويمررها ls -l. ثم awk يستخدم لعد البايتات. ال -type f توجد إشارة حتى يتم إرسال الملفات فقط (وليس الدلائل) إليها ls. بدون هذه العلامة ، سيتم أيضًا إرسال أسماء الدلائل إلى ls، وسيتم سرد كل ملف مرتين: مرة واحدة كملف فردي ، ومرة ​​واحدة كعنصر في الدليل.

نسخة جنو من du يمكن إعطاء قيم بالبايت الفعلي بدلاً من الكتل. من المؤسف أن إصدار BSD من du ليست مرنة.


77
2018-03-18 05:54



تفسير عظيم. من المثير للاهتمام عند استخدام du من GNU coreutils مع -b الخيار أحصل على نتيجة مختلفة من مع الخاص بك find يضخ. للحصول على دليل 36 جيجا ، أحصل على فارق 82 كيلوبايت. - Stefan Schmidt
هل هناك أي طريقة لطباعة ذلك بتنسيق أكثر قابلية للقراءة؟ - anon58192932


عرض حجم ملف واحد

du -h path_to_a_file

عرض حجم محتويات الدليل ، وكل دليل فرعي ، وكل ملف فردي:

du -h path_to_a_directory

إظهار حجم محتويات الدليل:

du -sh path_to_a_directory


73
2017-08-13 20:01



du -sch إذا كنت تريد شيئا أكثر سهولة القراءة. - Joey
Johannes ، أعتقد أنه يجب عليك نشر هذا التعليق كإجابة ، حتى يمكن قبوله؟ - Arjan
أجد الخيار -c المكرر (على الأقل في نظام التشغيل Mac OS X) ويقوم du -sh بإلغاء ضغط المجاميع الفرعية. - Daryl Spitzer
آها ، لم أكن أعلم أن المرء يستطيع أن يقبل إجابة الشخص. الآن على الأقل الناس يعرفون أن السؤال يتم حلها. - Arjan
سوف أقبل بسعادة إجابة جديدة تحسنا لي. - Daryl Spitzer


دو - يقول استخدام القرص ليس ال حجم الملف.

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

رمز المحطة الطرفية أعلاه (ايم على OSX 10.6) يقدم لي أفضل نتيجة و waaay أسرع من "تجد ... -exec"

مؤشر سريع

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

9
2017-11-11 22:31



إذا كنت تريد أن تفعل الشيء نفسه على أوبونتو: find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}' - Rodrigo Polo
هل هناك طريقة للحصول على هذه النتيجة بتنسيق قابل للقراءة من قبل الإنسان؟ - anon58192932


يمكنك استخدام du -ah . الذي يعرض أحجام كافة الملفات والدلائل بشكل متكرر.

هذا يمكن أن يقترن sort، لذلك سترى أكبر 20 دليلًا في المجلد الحالي:

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

ملاحظة: الخيار -h إلى عن على sort غير متوفر في OSX / BSD ، لذا يجب عليك التثبيت sort من عند coreutils (على سبيل المثال عبر brew) وتطبيق مسار بن ل PATHعلى سبيل المثال

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

خلاف ذلك الاستخدام:

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

5
2018-03-05 14:03



الأمر الأول لا يعمل على جهاز MacOS 10.12.1 #du -ah. | نوع -rh | head -20 sort: خيار غير صالح - h جرب "sort --help" لمزيد من المعلومات. - nucleartux
nucleartux تحقق من المذكرة أدناه الأمر. هذا يعمل في فرز جنو والذي يمكنك تثبيته على نظام ماك أو إس عن طريق: brew install coreutils، وإلا استخدام الأمر فرز BSD في النهاية دون -h. - kenorb


لقد جمعت بين جميع محاولاتك ودمجتها مع مخرجات بشرية قابلة للقراءة ، وكانت النتيجة:

#!/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 


2
2018-03-05 11:30