За допомогою GNU du(тобто для невбудованого Linux або Cygwin) ви можете використовувати --excludeопцію для виключення файлів, які не хочете відповідати.
du -s --exclude='*.html' /var/foo
Якщо ви хочете позитивно відповідати *.pdfфайлам, вам потрібно буде використовувати якийсь інший метод для списку файлів, і duпринаймні відображатиметься один вихідний рядок за аргументом, плюс загальна сума з опцією -c. Ви можете зателефонувати, tailщоб видалити всі, крім останнього рядка, або sed, щоб також видалити слово "total". Щоб перерахувати файли в одному каталозі, використовуйте підстановку в оболонці.
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вони працюватимуть duне один раз, щоб утримуватися під обмеженням довжини командного рядка. Використовуючи метод підстановки, ви отримаєте помилку, якщо це трапиться ("Ліміт довжини командного рядка перевищено"). Наступний код передбачає, що у вас немає жодного відповідного імені файлу, що містить новий рядок.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf?