Solución
Al proporcionar la opción -c(o --total) a du(1), puede indicarle que produzca un total general. Si su implementación de du(1)admite cualquiera de estas opciones, puede lograr el efecto deseado con el siguiente comando:
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
EDITAR: tenga en cuenta que si el número de archivos excede el número máximo de parámetros permitidos por su sistema, findaún puede ejecutarse commandvarias veces. Algunas implementaciones de du(1)también admiten la lectura de los nombres de archivo de un archivo, que no sufre la limitación mencionada:
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
Explicación
La diferencia entre la semántica de -exec command {} \;y -exec command {} +es la siguiente:
command {} \;se ejecuta commanduna vez por cada resultado de find. El nombre de ruta del resultado se pasa en lugar de {}.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} \;
1
2
3
command {} +se ejecuta command, cuando todos los resultados han sido recuperados. Los nombres de ruta de los resultados se pasan en lugar de {}.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} +
1 2 3
La -print0opción hace find(1)que se impriman los nombres de archivo encontrados en la salida estándar separada por el carácter nulo, y la --files0-fromopción hace du(1)que se lean los nombres de archivo separados por nulo. A diferencia del nuevo carácter de línea, el carácter nulo puede no aparecer en un nombre de archivo, por lo que la salida no es ambigua.
Para obtener más información sobre las opciones de du(1)y find(1), debe consultar las respectivas páginas de manual:
$ man du
$ man find