Solução
Ao fornecer a opção -c(ou --total) para du(1), você pode instruí-la a produzir um total geral. Se sua implementação de du(1)suportar alguma dessas opções, você poderá obter o efeito desejado usando o seguinte comando:
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
EDIT: Observe que, se o número de arquivos exceder o número máximo de parâmetros permitido pelo seu sistema, findainda poderá ser executado commandvárias vezes. Algumas implementações du(1)também suportam a leitura dos nomes de arquivos de um arquivo, que não sofre a limitação mencionada:
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
Explicação
A diferença entre a semântica de -exec command {} \;e -exec command {} +é a seguinte:
command {} \;executa commanduma vez para cada resultado de find. O nome do caminho do resultado é passado em vez de {}.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} \;
1
2
3
command {} +executa command, quando todos os resultados foram recuperados. Os nomes dos caminhos dos resultados são passados em vez de {}.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} +
1 2 3
A -print0opção faz find(1)com que os nomes de arquivos encontrados sejam impressos na saída padrão separada pelo caractere nulo, e a --files0-fromopção causou du(1)a leitura dos nomes de arquivos separados por nulo. Diferentemente do novo caractere de linha, o caractere nulo pode não aparecer em um nome de arquivo, portanto, a saída é inequívoca.
Para saber mais sobre as opções de du(1)e find(1), você deve consultar as respectivas páginas de manual:
$ man du
$ man find