systemadmin.es > Utilidades > -bash: /bin/cp: Argument list too long

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

Al realizar una copia o un borrado de un directorio con muchos ficheros nos podemos encontrar con el error:

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

Lo que hace la shell al encontrarse con una expresión así:

cp * /var/www/destino

Es expandir la expresión:

cp jre.bin cf8.bin /var/www/destino

En el caso que tengamos muchos ficheros puede ser que el listado completo no entre en el buffer que tienen reservado la shell, por lo que nos muestra el error:

Argument list too long

Para poder realizar la copia deberemos emplear xargs:

ls | xargs -I ARG cp ARG /var/www/destino

Mediante el parámetro -I indicamos una cadena que luego en el comando vamos a usar para pasar el parámetro. Para pasar el listado de ficheros podemos usar un simple ls o bien un find para filtrar mejor los ficheros que queremos.

2 comments to “-bash: /bin/cp: Argument list too long”

  1. Si usas find no es necesario xargs, puedes usar el parámetro -exec de find para hacer la llamada a cp.

  2. Con find y exec también se puede hacer pero con xargs puedes lanzar procesos en paralelo mediante los parámetros -n (número de parámetros) y -P (número de procesos)

Deja un comentario:

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