GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo eliminar todos los archivos de un directorio cuando informa que la lista de argumentos es demasiado larga?

Solución 1:

find . -maxdepth 1 -type f -exec rm -f {} \;

simplemente toma demasiado tiempo (un ejecutable de rm por archivo).

este es mucho más eficiente:

find . -maxdepth 1 -type f -print0 | xargs -r0 rm -f

ya que toma tantos nombres de archivo como argumento para rm tanto como sea posible, luego ejecuta rm con la siguiente carga de nombres de archivo... puede suceder que rm solo se llame 2 o 3 veces.

Solución 2:

En caso de que no pueda eliminar el directorio, siempre puede usar buscar.

find . -maxdepth 1 -type f -exec rm -f {} \;

Eso eliminará todos los archivos en el directorio actual y solo el directorio actual (no los subdirectorios).

Solución 3:

Ambos solucionarán el problema. Hay un análisis del rendimiento respectivo de cada técnica aquí.

find . -name WHATEVER -exec rm -rf {} \;

o

ls WHATEVER | xargs rm -rf

El problema se debe a que bash expande "*" con todos los elementos del directorio. En su lugar, ambas soluciones funcionan a través de cada archivo.

Solución 4:

Pude hacer esto retrocediendo un nivel:

cd ..

Y corriendo:

rm directory name -rf

Y luego volver a crear el directorio.

Solución 5:

Todas estas invocaciones de búsqueda son muy buenas, pero rara vez recuerdo exactamente la nomenclatura necesaria cuando tengo prisa:en su lugar uso ls. Como alguien menciona, ls. funcionaría pero prefiero ls -1 como en:

ls-1 | xargs -n 100 rm -rf

Es bastante seguro jugar con la cifra -n xxx, ya que exceder el máximo se corregirá automáticamente (si se excede el tamaño máximo; consulte -s) o si se excede el args-max para una aplicación, por lo general será más bien obvio.

Cabe señalar que grep es útil para insertar en el medio de esta cadena cuando solo desea eliminar un subconjunto de archivos en un directorio grande y, por alguna razón, no desea usar find.

Esta respuesta asume que está utilizando las utilidades principales de Gnu para sus ls, xargs, etc.


Linux
  1. Cómo encontrar un archivo en Linux en todos los directorios recursivamente

  2. Enumere recursivamente todos los archivos en un directorio, incluidos los archivos en los directorios de enlaces simbólicos

  3. Error de lista de argumentos demasiado larga para comandos rm, cp, mv

  4. ¿Cómo enumerar los archivos eliminados recientemente de un directorio?

  5. ¿Cómo puedo encontrar todos los archivos vinculados en un sistema de archivos?

¿Cómo mover todos los archivos del directorio actual al directorio superior?

¿Cómo puedo enumerar solo archivos no vacíos usando ls?

¿Cómo encontrar / enumerar todos los archivos únicos en dos directorios?

Cómo encontrar todos los archivos de cero bytes en el directorio

¿Cómo puedo eliminar recursivamente directorios vacíos en mi directorio de inicio?

¿Cómo enumerar todos los archivos de una partición en Linux?