find … -exec rm {} \; ejecuta el rm comando para cada archivo. Aunque iniciar un nuevo proceso es bastante rápido, sigue siendo mucho más lento que el mero hecho de eliminar un archivo.
find … -exec rm {} + llamaría rm en lotes, que es mucho más rápido:pagas el costo de ejecutar rm una vez por lote, y cada lote realiza muchas eliminaciones.
Aún más rápido es no invocar rm en absoluto. El find el comando en Linux tiene una acción -delete para eliminar un archivo coincidente.
find ./cache -type f -mtime +0.5 -delete
Sin embargo, si está produciendo archivos a tal velocidad que find … -exec rm {} \; no puede seguir el ritmo, probablemente haya algún problema con su configuración. Si cache contiene millones de archivos, debe dividirlo en subdirectorios para un acceso más rápido.
Intenta usar xargs :
find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
Explicación actualizada para @pradeepchhetri
Si usa find con -exec , cada archivo que find encontrado llamará a rm una vez. Entonces, si encontró una gran cantidad de archivos, es decir, 10000 archivos, llamó a rm 10000 veces.
xargs tratará la salida de find como argumento de comando para rm , por lo que xargs proporcionará tantos argumentos como rm puede manejar a la vez, es decir, rm -f file1 file2 ... Por lo tanto, hace menos llamadas de bifurcación, hace que el programa se ejecute más rápido.