Como solucionar el error “Argument list too long”

y

Si trabaja un rato con Linux, tarde o temprano te vas a topar con el error “Lista de argumentos demasiado larga”, esto ocurre cuando hay demasiados archivos en un directorio y el comando que deseas ejecutar no puede gestionar tantos. Pero hay una solución sencilla que puedes aplicar en l mayoría de los casos. Aquí la solución.

Como solucionar el error “Argument list too long”

Si tienes que copiar todos lo archivos .jpg de una carpeta, pero hay mas de 30,000 archivos es posible que te salga este error, al momento de ejecutar el comando  te mostrará un error como este:

-bash: /bin/cp: La lista de argumentos es demasiado larga

El mensaje en muchos de los casos puede aparecer en inglés y muestre un texto como este:

-bash: /bin/cp: Argument list too long

Es el mismo mensaje y no solo puede aparecer con el comando cp, sino con casi todos los comandos que permiten utilizar comodines o cuando se gestionan listas de archivos en rutas con muchos archivos dentro de ellas.

Un ejemplo clasico es cuando deseas respaldar una gran cantidad de archivos utilizando el comando tar, supongamos que tienes que respaldar todos los archivos .txt que existan en la ruta actual, pero hay miles de ellos. Es casi seguro que este error te aparecerá.

Para resolverlo puedes utilizar esta solución.

Primero debes crear una lista de los archivos que deseas procesar, ya se para borrarlo, copiarlos, comprimirlos, etc. No importa lo que quieras hacer, para todos los casos vas a necesitar la lista de archivos y para crearla puedes utilizar el comando find.

find ./ -type f -name "*.txt" -print > /tmp/archivos.list

En este archivo estarán la lista de los miles ar archivos con tu ruta completa. Luego solo debes utilizar esa lista para procesar los archivos.

Por ejemplo si deseas comprimir todos los archivos con tar, puedes ejecutar el comando de esta manera:

tar -zcvf  archivos_txt.tar.gz --files-from /tmp/archivos.list

Si quisieras luego borrar archivos en linux podrías ejecutar el siguiente comando:

cat /tmp/archivos.list | xargs rm -v

En el caso de que quisieras copiarlos por ejemplo usando el comando cp, el comando sería así:

cat ​/tmp/archivos.list | xargs -I {} cp -uf {} /ruta/destino/

La idea es que puedas obtener la lista total de archivos y la almacenes en una lista y la utilices mediante el comando xargs o mediante una interfaz de entrada como permite el comando tar (–files-from) para indicar al comando, los archivos que quieres procesar.

Que otros comando conoces que presentan este problema del error “Lista de argumentos es demasiado larga”. Seria genial tener todos los casos y como se resuelve, agrega tu aporte a los comentarios.


This entry was posted in Blog and tagged , , , , . Bookmark the permalink.
Top Courses in IT & Software 640x480

Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*


Calcula para comentar *

Más en Blog
linux journal cover 61 mi primer tomo de linux journal
Linux Journal deja publicar y deja un gran vacío en la comunidad

Esta revista Linux Journal fue una de las pocas fuentes de información sobre Linux que podía conseguir por los años...

el comando mas perverso en linux, venganza de un sisadmin
Cuando el SysAdmin se quiere vengar…

No hay duda que tener un buena relación con la gente de TI debería ser una materia obligatoria y básica...

Cerrar