it-swarm.asia

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

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

71
Daryl Spitzer

إصدار 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 Get Get. (لا توجد شوكات غريبة أو xattrs في هذه المجموعة من الملفات.) إنها أصغر بكثير من القيمة المبلغ عنها بواسطة du.

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

يمكن لإصدار GNU من du إعطاء قيم بالبايت الفعلي بدلاً من الكتل. من المؤسف أن إصدار BSD لـ du غير مرن.

79
wch

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

du -h path_to_a_file

أظهر حجم محتويات الدليل وكل دليل فرعي وكل ملف فردي:

du -h path_to_a_directory

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

du -sh path_to_a_directory

75
Daryl Spitzer

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

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

أعلى رمز المحطة الطرفية (im on osx 10.6) يقدم لي أفضل نتيجة وهو أسرع من "find ...

معيار سريع

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
Acid

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

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

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

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

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

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

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

لقد جمعت كل ما تبذلونه من approuches ومزجها مع إخراج الإنسان للقراءة ، والنتيجة هي:

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

رابط إلى Gist: https://Gist.github.com/mlegenhausen/9365461

2
malte