Как рекурсивно подсчитать дисковое пространство, занимаемое только некоторыми файлами каталога?
решение1
find -iname '*.jpg' -print0 | du --files0-from=- -h -c | tail -1
-iname
поиск без учета регистра-print0
пишетNUL
вместо новых строк--files0-from=-
читаетNUL
вместо новых строк и читает изstdin
вместо из аргументов-h
выводит результаты в удобном для восприятия человеком формате (например,1K
вместо1024
)-c
выводит общую сумму (например,23G
)tail -1
выведет только общую сумму, не учитывая размеры отдельных файлов
решение2
С zsh
:
zmodload zsh/stat
stat -LA blocks +blocks -- **/*.jpg(NDoN)
print $(( (${(j[+])blocks} + 0) * 512 ))
Выведет совокупное использование диска всеми файлами, имя которых заканчивается на .jpg
(включая скрытые с D
квалификатором). Обратите внимание, что если есть несколько жестких ссылок на один и тот же файл, их использование диска будет подсчитано несколько раз (это отличается от того, что du
делают большинство реализаций).
Если некоторые из файлов или типакаталог, который будет учитывать только использование диска самими файлами каталога, а не файлами, которые могут быть найдены при просмотре этих каталогов (еще одно отличие от du
).