Назад | Перейти на главную страницу

Расчет дискового пространства, занимаемого многими файлами .png

У меня есть 357 файлов .png, расположенных в разных подкаталогах текущего каталога:

settings# find . -name \*.png |wc -l
    357

settings# find . -name \*.png | head
./assets/authenticationIcons/audio.png
./assets/authenticationIcons/bbid.png
./assets/authenticationIcons/camera.png
./bin/icons/ca_video_chat.png
./bin/icons/ca_voice_control.png
./bin/icons/ca_vpn.png
./bin/icons/ca_wifi.png

Есть ли один инструмент для расчета общего дискового пространства, занимаемого ими (до того, как я их уничтожу)?

Я пробовал (безуспешно):

settings# find . -name \*.png | xargs du -s
4       ./assets/support/wifi_locked_icon_white.png
1       ./assets/support/wifi_vpn_icon_connected.png
1       ./assets/support/wi_fi.png
1       ./assets/support/wi_fi_conected.png
8       ./bin/blackberry-tablet-icon.png
2       ./bin/icons/ca_about.png
2       ./bin/icons/ca_accessibility.png
2       ./bin/icons/ca_accounts.png
2       ./bin/icons/ca_airplane_mode.png
2       ./bin/icons/ca_application_permissions.png
1       ./bin/icons/ca_balance.png

Может быть что-то вроде:

find . -type f -name "*.png" -printf '%s\n' | awk '{ sum += $1 } END { print sum }'

? Кажется, у меня работает - результаты будут в байтах.

du мой любимый ответ. Если у вас есть фиксированная структура файловой системы, вы можете использовать:

du -hc *.png

Если вам нужно добавить подкаталоги, просто добавьте:

du -hc *.png **/*.png **/**/*.png

и т. д. и т. д.

Однако это не очень полезная команда, поэтому используйте команду find:

TOTAL=0;for I in $(find . -name \*.png); do  TOTAL=$((TOTAL+$(du $I | awk '{print $1}'))); done; echo $TOTAL

Это будет отражать общий размер в байтах всех найденных вами файлов.

Надеюсь, это поможет.

find . -name *.png -print0 | du -c --files0-from=- | tail -1

В размерах логических блоков; вставьте -b в команду du для вывода байтов.

Чтобы найти размер в килобайтах (если в столбце 5 ls -l указано 'size'

find . -name \*.png -exec ls -lk {} \; | awk '{ sum +=$5} END {print sum}'