Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
Cómo eliminar X número de archivos en un directorio

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)
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¿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 -rf

Eliminará 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 -c
over 4 years ago · Santiago Trujillo Denunciar

0

La 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 -rf
over 4 years ago · Santiago Trujillo Denunciar

0

Use 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
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda