Si está tratando de eliminar una gran cantidad de archivos a la vez (eliminé un directorio con más de 485,000 hoy), probablemente se encontrará con este error:
/bin/rm: Argument list too long.
El problema es que cuando escribes algo como rm -rf *
, el*
se reemplaza con una lista de todos los archivos coincidentes, como "rm -rf file1 file2 file3 file4" y así sucesivamente. Hay un búfer de memoria relativamente pequeño asignado para almacenar esta lista de argumentos y si se llena, el shell no ejecutará el programa.
Para solucionar este problema, mucha gente usará el comando find para encontrar cada archivo y pasarlos uno por uno al comando "rm" de esta manera:
find . -type f -exec rm -v {} \;
Mi problema es que necesitaba eliminar 500,000 archivos y estaba tardando demasiado.
Me topé con una forma mucho más rápida de eliminar archivos: el comando "buscar" tiene un indicador "-delete" incorporado. Esto es lo que terminé usando:
find . -type f -delete
Usando este método, estaba eliminando archivos a una velocidad de aproximadamente 2000 archivos / segundo, ¡mucho más rápido!
También puede mostrar los nombres de los archivos a medida que los elimina:
find . -type f -print -delete
... o incluso mostrar cuántos archivos se eliminarán, y luego el tiempo que lleva eliminarlos:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s