В GNU du(то есть в не встроенном Linux или Cygwin) вы можете использовать эту --excludeопцию, чтобы исключить файлы, которые вы не хотите сопоставлять.
du -s --exclude='*.html' /var/foo
Если вы хотите точно сопоставить *.pdfфайлы, вам нужно будет использовать какой-то другой метод для duвывода списка файлов, и он будет отображать по крайней мере одну строку для каждого аргумента плюс итоговую сумму с параметром -c. Вы можете позвонить, tailчтобы удалить все, кроме последней строки, или sed, чтобы удалить слово «итого». Чтобы перечислить файлы в этом каталоге, используйте подстановочные знаки в оболочке.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Если вам также необходимо просмотреть файлы в подкаталогах, используйте findили используйте **/шаблон, если ваша оболочка это поддерживает. В **/bash сначала запустите shopt -s extglobи обратите внимание, что версии bash до 4.2 будут проходить символические ссылки на каталоги; в zsh это работает из коробки.
du -sc /var/foo/**/*.pdf | tail -n1
Дополнительным осложнением для версии find является то, что если файлов слишком много, они findбудут запускаться duболее одного раза, чтобы не превышать ограничение длины командной строки. При использовании подстановочного метода вы получите ошибку, если это произойдет («превышен предел длины командной строки»). Следующий код предполагает, что у вас нет подходящего имени файла, содержащего символ новой строки.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf?