W GNU du(tj. W niewbudowanym systemie Linux lub Cygwin) możesz użyć --excludeopcji wykluczenia plików, których nie chcesz dopasowywać.
du -s --exclude='*.html' /var/foo
Jeśli chcesz pozytywnie dopasować *.pdfpliki, musisz użyć innej metody, aby wyświetlić listę plików, i duwyświetli co najmniej jedną linię wyjściową na argument, plus ogólną sumę z opcją -c. Możesz zadzwonić, tailaby usunąć wszystko oprócz ostatniego wiersza, lub sed, aby usunąć również słowo „total”. Aby wyliczyć pliki w tym jednym katalogu, użyj symboli wieloznacznych w powłoce.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Jeśli potrzebujesz również przejść do plików w podkatalogach, użyj findlub użyj **/wzorca, jeśli twoja powłoka to obsługuje. W przypadku **/bash, pierwszego uruchomienia shopt -s extglobi zauważ, że wersje bash do 4.2 będą przechodzić przez dowiązania symboliczne do katalogów; w zsh działa to od razu po wyjęciu z pudełka.
du -sc /var/foo/**/*.pdf | tail -n1
Dodatkową komplikacją związaną z wersją find jest to, że jeśli jest zbyt wiele plików, finduruchomi się duwięcej niż jeden raz, aby zachować limit długości wiersza poleceń. Dzięki metodzie wieloznacznej pojawi się błąd, jeśli tak się stanie („Przekroczono limit długości wiersza poleceń”). Poniższy kod zakłada, że nie masz pasującej nazwy pliku zawierającej znak nowej linii.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf?