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.