Com o GNU du
(ou seja, no Linux ou Cygwin não integrado), você pode usar a opção --exclude
para excluir os arquivos que não deseja corresponder.
du -s --exclude='*.html' /var/foo
Se você quiser corresponder positivamente os arquivos *.pdf
, será necessário usar outro método para listar os arquivos, e du
exibirá pelo menos uma linha de saída por argumento, além de um total geral com a opção% código%. Você pode chamar -c
para remover todos, 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 percorrer arquivos em subdiretórios, use tail
ou use um padrão find
se o seu shell suportar isso. Para **/
, no bash, primeiro execute **/
, e observe que versões bash até 4.2 irão percorrer links simbólicos para diretórios; em zsh, isso funciona fora da caixa.
du -sc /var/foo/**/*.pdf | tail -n1
Uma complicação adicional com a versão find é que, se houver muitos arquivos, shopt -s extglob
executará find
mais 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 de comprimento da linha de comando excedido”). O código a seguir assume que você não tem 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}'