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.