Para obtener X número de archivos en un directorio, puedo hacer:
$ ls -U | head -40000¿Cómo eliminaría entonces estos 40.000 archivos? Por ejemplo, algo como:
$ "rm -rf" (ls -U | head -40000)¿Qué hay de usar awk como filtro?
find "$FOLDER" -maxdepth 1 -mindepth 1 -print0 \ | awk -v limit=40000 'NR<=limit;NR>limit{exit}' RS="\0" ORS="\0" \ | xargs -0 rm -rfEliminará de forma fiable como máximo 40.000 archivos (o carpetas). Fiablemente significa independientemente de los caracteres que puedan contener los nombres de archivo.
Por cierto, para obtener la cantidad de archivos en un directorio de manera confiable, puede hacer lo siguiente:
find FOLDER -mindepth 1 -maxdepth 1 -printf '.' | wc -cLa herramienta que necesita para esto es xargs . Convertirá la entrada estándar en argumentos para un comando que especifique. Cada línea de la entrada se trata como un único argumento.
Por lo tanto, algo como esto funcionaría (vea el comentario a continuación, sin embargo, ls no debería analizarse de esta manera normalmente):
ls -U | head -40000 | xargs rm -rf Recomendaría antes de intentar esto comenzar con un tamaño de head pequeño y usar xargs echo para imprimir los nombres de archivo que se pasan para que comprenda lo que eliminará.
Tenga en cuenta que si tiene archivos con caracteres extraños, esto a veces puede ser un problema. Si está en un sistema GNU moderno, también puede usar los argumentos de estos comandos que usan caracteres nulos para separar cada elemento. Dado que un nombre de archivo no puede contener un carácter nulo, analizará de forma segura todos los nombres posibles. No conozco una forma simple de tomar los elementos X superiores cuando están separados por cero.
Entonces, por ejemplo, puede usar esto para eliminar todos los archivos en un directorio
find . -maxdepth 1 -print0 | xargs -0 rm -rfUse una matriz bash y córtela. Si es probable que la cantidad y el tamaño de los argumentos se acerquen a los límites del sistema, aún puede usar xargs para dividir el resto.
files=( * ) printf '%s\0' "${files[@]:0:40000}" | xargs -0 rm