Introducción
Uno de mis servidores de desarrollo contiene millones de archivos en un solo directorio. Para liberar espacio en disco, decidimos moverles una nueva carpeta creada en otro disco conectado al mismo sistema. Cuando intenté mover el archivo con el comando mv
, recibí el siguiente error:
-bash: / bin / mv: lista de argumentos demasiado larga
El error "Lista de argumentos demasiado larga" suele ocurrir cuando se pasa una gran cantidad de parámetros a un solo comando. Una variable de sistema ARG_MAX define la longitud máxima de caracteres de los argumentos en un comando de shell.
La solución
La solución rápida es usar la utilidad de línea de comandos xargs
o encontrar el comando con -exec… {}. Ambos comandos dividen un comando grande en uno más pequeño y completan el trabajo sin errores.
Uso de buscar con xargs: el siguiente comando moverá todos los archivos con la extensión .txt al directorio de destino:
find . -name '*.txt' | xargs mv --target-directory=/path/to/dest_dir/
Uso de buscar con exec: también puede usar exec para realizar la misma tarea:
find . -name '*.txt' -exec mv {} /path/to/dest_dir/ \;
Los comandos predefinidos anteriores navegarán recursivamente a los subdirectorios. Para limitar la búsqueda solo al directorio actual, utilice -maxdepth
seguido del número límite de subdirectorios:
find . -name '*.txt' -maxdepth 1 -exec mv {} /path/to/dest_dir/ \;
Puede encontrar el límite máximo con el comando getconf ARG_MAX
en el shell.
Conclusión
En este tutorial hemos visto cómo solucionar el error: "-bash: / bin / mv: Argument list too long"