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.