كيف يمكنني العثور على حجم بعض الملفات المحددة؟

StackOverflow https://stackoverflow.com/questions/902233

  •  05-09-2019
  •  | 
  •  

سؤال

يحاول الأمر تلخيص الأحجام:

find . -iname "*.dmg" -exec du -sh '{}' \; 3&> /dev/null |
    awk '{print $1}' | summming_up_program???

هل يمكنك العثور على حل أبسط؟

حل أوبونتو. شكرا على نهاية awk لأيمن.

find . -iname "*.dmg" -printf '%b\n' |
    awk 'BEGIN { s = 0 } {s += $1 } END { print "%dMB", s / 2^20 }'
هل كانت مفيدة؟

المحلول

find . -iname '*.dmg' -exec stat -f '%z' '{}' \; |
     awk 'BEGIN { s = 0 } {s += $1 } END { print s }'

stat يستخدم للحصول على حجم الملف. awk يستخدم لتلخيص جميع أحجام الملفات.

يحرر:

حل لا شوكة stat:

find . -iname '*.dmg' -ls | 
     awk 'BEGIN { s = 0 } {s += $7 } END { print s }'

نصائح أخرى

wc -c *.pyc | tail -n1 | cut -f 1 -d ' '

قد يكون أسرع ثم cat'ing الملفات من خلال الأنبوب. wc -c لا تحسب البايتات، فإنه يسترجع الحجم من INODE ... أو HDD الخاص بي لديه سرعة قراءة من 717 جيجابايت / ثانية :-)

$ time wc -c very-big.pcap
5394513291 very-big.pcap
real    0m0.007s
user    0m0.000s
sys     0m0.000s

القط * .dmg | مرحاض -

Cat نسخ جميع الملفات إلى Stdout، وتعتبر مرحاض حجم ما تم إلقاؤه. لا شيء يحصل مكتوب على القرص.

ليس فعالا، ولكن حتى أستطيع أن أفهم ذلك :)

قيادة أيمن المحسنة غير المفرطة:

find . -iname '*.dmg' -ls 3&> /dev/null | 
      awk 'BEGIN { s = 0 } {s += $7 } END { print "%dGB", s / 2^30 }'

بفضل أيمن لتصحيح ردي الأولي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top