Как я могу найти размер некоторых указанных файлов? - PullRequest
2 голосов
/ 23 мая 2009

Команда пытается суммировать размеры:

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

Можете ли вы найти более простое решение?

Решение Ubuntu. Спасибо за конец Awk Айману.

find . -iname "*.dmg" -printf '%b\n' |
    awk 'BEGIN { s = 0 } {s += $1 } END { print "%dMB", s / 2^20 }'

Ответы [ 4 ]

3 голосов
/ 23 мая 2009
find . -iname '*.dmg' -exec stat -f '%z' '{}' \; |
     awk 'BEGIN { s = 0 } {s += $1 } END { print s }'

stat используется для получения размера файла. awk используется для суммирования всех размеров файлов.

Edit:

Решение, которое не разветвляется stat:

find . -iname '*.dmg' -ls | 
     awk 'BEGIN { s = 0 } {s += $7 } END { print s }'
1 голос
/ 23 мая 2009
wc -c *.pyc | tail -n1 | cut -f 1 -d ' '

Может быть быстрее, чем катать файлы через канал. wc -c не считает байты, он извлекает размер из inode ... или мой жесткий диск имеет скорость чтения 717 ГБ / с: -)

$ time wc -c very-big.pcap
5394513291 very-big.pcap
real    0m0.007s
user    0m0.000s
sys     0m0.000s
0 голосов
/ 23 мая 2009

Улучшенная команда не разветвления Аймана:

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

Спасибо Айману за исправление моего первоначального ответа.

0 голосов
/ 23 мая 2009

кошка * .dmg | туалет

cat копирует все файлы в стандартный вывод, и wc считает размер того, что было выгружено. Ничего не записывается на диск.

Не так эффективно, но даже я могу это понять:)

...