За допомогою 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
?