Com o GNU du(ou seja, no Linux ou Cygwin não incorporado), você pode usar a --excludeopção para excluir os arquivos que não deseja corresponder.
du -s --exclude='*.html' /var/foo
Se você deseja corresponder positivamente *.pdfarquivos, você precisará usar algum outro método para listar os arquivos, e duvai pelo menos exibição uma linha de saída por argumento, além de um grande total com a opção -c. Você pode ligar tailpara remover tudo, exceto a última linha, ou sed para remover a palavra "total" também. Para enumerar os arquivos nesse diretório, use curingas no shell.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Se você precisar atravessar arquivos em subdiretórios também, use findou use um **/padrão se o seu shell suportar isso. Para **/, no bash, primeira execução shopt -s extglob, e observe que as versões do bash até 4.2 atravessarão links simbólicos para diretórios; no zsh, isso funciona imediatamente.
du -sc /var/foo/**/*.pdf | tail -n1
Uma complicação adicional da versão find é que, se houver muitos arquivos, findserá executado dumais de uma vez, para manter o limite de comprimento da linha de comando. Com o método curinga, você receberá um erro se isso acontecer ("limite do comprimento da linha de comando excedido"). O código a seguir supõe que você não tenha nenhum nome de arquivo correspondente que contenha uma nova linha.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf?