Error al intentar eliminar muchos archivos en un directorio

A muchos de nosotros nos habrá pasado que al intentar eliminar una gran cantidad de archivos de un directorio nos encontremos con el siguiente mensaje:

$ rm *

bash: /usr/bin/rm: The parameter or environment lists are too long

El mensaje anterior indica que el kernel de Linux tiene una cantidad fija de memoria disponible para el ambiente de ejecución del programa y la lista de argumentos, la cual no es suficiente para realizar la operación solicitada.
En mi caso el * es sustituido por el shell por la lista completa de archivos que deseo eliminar, de tal manera que bash me devuelve el error al sobrepasar el tamaño máximo de buffer en el sistema operativo. Para conocer el tamaño del buffer basta ejecutar

$ getconf ARG_MAX
131072

El tamaño de buffer varia de sistema operativo, por ejemplo AIX provee 24kb y HP UX 2megas

Para poder ejecutar el comando (eliminar, mover, listar, etc), nos podemos auxiliar de las “pipes” utilizando xargs o exec

find . -exec rm {} \;

ls | xargs rm

Saludos.

2 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Using Debian IceWeasel Debian IceWeasel 2.0.0.14 on Debian GNU/Linux Debian GNU/Linux

    Buena explicacion del porque sale: “The parameter or environment lists are too long”

    Comment by kbezon — August 13, 2008 #

  2. Using Debian IceWeasel Debian IceWeasel 3.0.6 on Debian GNU/Linux Debian GNU/Linux

    Buenale vostorga! tenia un pequeño bash script que no me funcionaba porque tenia muchos archivos.
    😀

    Comment by msamour — May 18, 2009 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.