GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo corregir /bin/rm:no se puede ejecutar [Lista de argumentos demasiado larga]

El comando rm se utiliza en Linux para eliminar archivos y directorios. Se puede usar para eliminar algunos archivos especificando el nombre de cada archivo, o se puede usar con -r argumento (recursivo ) para eliminar un directorio y toda la estructura de árbol de directorios que se encuentra debajo de él.

La sintaxis a usar para comando rm es:

$ rm <file1> <file2> ... <fileN> 
$ rm -r <directory1> <directory2> ... <directoryN> <target_directory>

Eliminar archivos y directorios en Linux

Estas sintaxis también se pueden combinar para eliminar archivos y directorios de una sola vez:

$ rm -r file1 file2 file3 directory1 directory2

También puede especificar nombres de archivos y directorios con comodines, si los nombres son similares, es decir, comienzan, terminan o contienen el mismo patrón en su nombre. Esto es especialmente útil cuando hay que eliminar una gran cantidad de archivos con la misma extensión.

Por ejemplo, para eliminar todos los archivos cuyo nombre de archivo comience con la cadena 'archivo ', podemos ejecutar:

$ rm file*

Del mismo modo, para eliminar todos los archivos con extensión '.txt' , podemos ejecutar:

$ rm *.txt

Básicamente, lo que hacen los comodines es:colocar todos los archivos o directorios que cumplan con el patrón de comodines como argumentos para rm . Por lo tanto, en teoría, no hay límite en el número de argumentos para rm comando.

Eliminación de una gran cantidad de archivos:error "Lista de argumentos demasiado larga"

Aunque teóricamente 'rm ' no hay límite en la cantidad de argumentos, hay un límite predefinido en la cantidad máxima de argumentos con los que puede trabajar un solo comando.

Este es un límite definido en el sistema Linux y se basa en el tamaño de pila del sistema. Por lo tanto, si un patrón comodín coloca decenas de miles de archivos o directorios como argumentos, el programa arroja un error:“Lista de argumentos demasiado larga “.

Tomemos un ejemplo de una carpeta que contiene alrededor de 2.5 lacs (250K ) archivos.

$ ls -l | wc -l
$ ls | head

Intentemos eliminarlos con un comodín.

$ rm file*

Por lo tanto, da el error antes mencionado. Veamos ahora cómo podemos solucionar este error.

Solución:use el comando Buscar con el argumento '-exec' para eliminar miles de archivos

El comando de búsqueda básicamente busca archivos en directorios según diferentes parámetros, como patrón de nombre de archivo, extensión de archivo, etc.

Luego hacemos uso del '-exec' parámetro de ‘buscar‘ que le permitirá ejecutar cualquier comando sobre la salida de buscar .

$ find . -maxdepth 1 -name "<filename_pattern>" -exec rm -r {} \;

Aquí, el primer argumento, '.' (directorio actual) es el directorio donde encontrar los archivos. Si se van a eliminar archivos de algún otro directorio, debe especificar aquí la ruta a ese directorio.

El argumento '-maxdepth 1' considera solo los archivos y directorios en el directorio actual. Sin especificar esta profundidad, el comando de búsqueda buscará en todos los subdirectorios innecesariamente.

El argumento "-name" se utiliza para buscar archivos y directorios con un patrón de cadena. El 'filename_pattern ' especifica el patrón de cadena. Luego especificamos el ‘rm -r‘ comando después de un argumento '-exec' .

Los corchetes abiertos '{ }' son un marcador de posición para el argumento que se utilizará a partir de la salida de find.

$ find . -maxdepth 1 -name "file*" -exec rm -r {} \;

Como podemos ver, todos los archivos han sido eliminados. El mismo comando se puede usar para eliminar directorios de forma masiva, ya que estamos pasando el '-r' argumento.

Conclusión

En este artículo, aprendimos sobre el comando comando rm y cómo el problema 'Lista de argumentos demasiado larga ' se puede solucionar usando 'rm' combinado con el 'buscar ‘ comando.

Si tiene algún comentario o pregunta, ¡háganoslo saber en los comentarios a continuación!


Linux
  1. Cómo ejecutar archivos .bin y .run en Debian

  2. Cómo arreglar '/usr/bin/dirmngr':No existe tal archivo o directorio

  3. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  4. ¿Cómo hacer eco de una explosión?

  5. ¿Cómo causar el error "Lista de argumentos demasiado larga"?

Cómo ejecutar archivos .bin y .run en Ubuntu

bash:/bin/tar:lista de argumentos demasiado larga al comprimir muchos archivos con tar

¿Cuándo debo usar #!/bin/bash y cuándo #!/bin/sh?

Diferencia entre /bin y /usr/bin

Se movió el contenido de /bin a /usr/bin, ¿es posible deshacerlo?

#!/bin/sh vs #!/bin/bash para máxima portabilidad