viernes, 22 de mayo de 2009

Argument list too long

No es la primera vez que me encuentro con este error y por eso he decidido indagar un poco porqué sucede este error cuando hacemos operaciones (mv, rm...) con muchos ficheros.

La primera cosa que he encontrado que me parece coherente es que el problema no es del comando rm o de mv, sinó que es una limitación interna del kernel.

En la función execve() del kernel, que funciona igual que las funciones exec() (execl, execlp, execle, etc.) crean un buffer de 128K en memoria copiando la línia de comandos y el entorno para el nuevo proceso en ese espacio. La "lista de argumentos demasiado larga" es mensaje de error Kernel E2BIG. Hecho que execve () no es capaz de ajustar la lista de argumentos ofrecidos en el buffer de 128K.

Solución: El comando find
Para mover:
find $DIR1 -type f -name '*' -exec mv {} $DIR2/. \;

Para cambio de permisos
find $DIR -name "*" -print0 | xargs -0 chmod 750

No hay comentarios:

Publicar un comentario