В 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
?