Как рассчитать использование диска, фильтруя по шаблону (например, *.JPG)?

Как рассчитать использование диска, фильтруя по шаблону (например, *.JPG)?

Как рекурсивно подсчитать дисковое пространство, занимаемое только некоторыми файлами каталога?

решение1

find -iname '*.jpg' -print0 | du --files0-from=- -h -c | tail -1

  1. -inameпоиск без учета регистра
  2. -print0пишет NULвместо новых строк
  3. --files0-from=-читает NULвместо новых строк и читает из stdinвместо из аргументов
  4. -hвыводит результаты в удобном для восприятия человеком формате (например, 1Kвместо 1024)
  5. -cвыводит общую сумму (например, 23G)
  6. tail -1выведет только общую сумму, не учитывая размеры отдельных файлов

решение2

С zsh:

zmodload zsh/stat

stat -LA blocks +blocks -- **/*.jpg(NDoN)
print $(( (${(j[+])blocks} + 0) * 512 ))

Выведет совокупное использование диска всеми файлами, имя которых заканчивается на .jpg(включая скрытые с Dквалификатором). Обратите внимание, что если есть несколько жестких ссылок на один и тот же файл, их использование диска будет подсчитано несколько раз (это отличается от того, что duделают большинство реализаций).

Если некоторые из файлов или типакаталог, который будет учитывать только использование диска самими файлами каталога, а не файлами, которые могут быть найдены при просмотре этих каталогов (еще одно отличие от du).

Связанный контент