Se você usar find ... -exec COMMAND {} + ou find ... -print0 | xargs -0 COMMAND , xargs ou find será criar uma lista de argumentos de nome de arquivo que não ultrapasse o espaço de buffer definido por cada comando (limitado por ARG_MAX ). Se o espaço do buffer estiver esgotado, cada comando passará a lista de argumentos de nome de arquivo para COMMAND e começará a criar uma nova lista. Esse processo será repetido quantas vezes forem necessárias, até que não haja mais nomes de arquivos. Nesse ponto, a lista de nomes de arquivos que está sendo criada será passada para COMMAND a última vez.
Portanto, se você não está esperando que o comando find retorne um grande número de nomes de arquivos
find . -type f -not -regex '.+?nobackup.*' -exec du -c {} +
pode ser suficiente. Se você é e seu du suporta --files0-from , você pode usar, --files0-from=- para ler files com terminação nula diretamente de stdin ( du considere - para significar vindo de stdin )
find . -type f -not -regex '.+?nobackup.*' -print0 | du -c --files0-from=-
Observação: --files0-from não é especificado por posix , mas deve ser estendido nas versões mais recentes de gnu du . Se sua implementação omitiu, você provavelmente terá que repetir os resultados de find de alguma forma e somar os totais no loop.