GNU/Linux >> Tutoriales Linux >  >> Linux

Encuentre y elimine el archivo más antiguo si hay más de X archivos en un directorio en Linux

Tengo muchas películas en mi disco duro y las he almacenado en diferentes carpetas según el género de la película. Ahora, quiero mantener solo un número particular de archivos de películas en un directorio y eliminar todo lo demás. Más importante aún, quiero eliminar solo los archivos más antiguos. De esta manera puedo mantener un número constante de archivos en cada carpeta. Dado que tengo tantos archivos dispersos en muchas carpetas, es un proceso bastante lento ir a cada carpeta, buscar los archivos más antiguos y eliminarlos manualmente uno por uno. Mientras buscaba una manera fácil de hacer esto, encontré la siguiente solución. sigue leyendo No es tan difícil.

Buscar y eliminar el archivo más antiguo en un directorio en Linux

Digamos que desea buscar y eliminar el archivo más antiguo si hay más de 10 archivos en un directorio. ¿Cómo harías? Es muy simple.

Tome el siguiente directorio llamado ostechnix como ejemplo. Verifiquemos cuántos archivos hay en este directorio usando el comando:

$ find ostechnix/ -type f | wc -l

O cd en ese directorio y ejecute:

$ ls | wc -l

Salida de muestra:

33

Como ves en el ejemplo anterior, el directorio ostechnix contiene 33 archivos. No quiero 33 archivos en este directorio. Quiero eliminar todos los archivos más antiguos y conservar solo 10 archivos.

Ahora, busquemos y eliminemos los archivos más antiguos en este directorio si contiene más de 10 archivos. Para hacerlo, vaya a ese directorio:

$ cd ostechnix

Y ejecuta el siguiente comando:

$ ls -1t | tail -n +11 | xargs rm

O,

$ ls -1t | tail -n +11 | xargs rm -f

donde,

  • ls :Muestra el contenido del directorio.
  • -1t :  1(Número uno ) indica que la salida de ls debe ser un archivo por línea. t indica ordenar los contenidos por hora de modificación, los más recientes primero.
  • tail :Muestra la última parte de los archivos.
  • -n +11 :muestra las últimas NUM líneas, en lugar de las últimas 10; o use -n +NUM para que la salida comience con la línea NUM
  • xargs :Cree y ejecute líneas de comando desde la entrada estándar.
  • rm -f :Eliminar archivos o directorios. f indica ignorar archivos y argumentos inexistentes, nunca preguntar. Significa que este comando no mostrará ningún mensaje de error si hay menos de 10 archivos.
  • | - Es un oleoducto. Generalmente es una secuencia de uno o más comandos separados por uno de los operadores de control | o |& .

Entonces, el comando anterior eliminará los archivos más antiguos si hay más de 10 archivos en el directorio de trabajo actual. Para verificar cuántos archivos hay en el directorio después de eliminar los archivos más antiguos, simplemente ejecute:

$ ls | wc -l

Actualización:

Si los nombres de archivo contienen espacios, el comando anterior no funcionará. Porque, los xargs El comando toma caracteres de espacio en blanco (tabulaciones, espacios, líneas nuevas) como delimitadores. En ese caso, puede restringirlo solo para los caracteres de nueva línea ('\n' ) con -d opción como la siguiente:

$ ls -1t | tail -n +11 | xargs -d '\n' rm -f

Espero que esto ayude.

Lectura sugerida: 

  • Cómo encontrar y eliminar archivos de más de X días en Linux
  • Eliminar archivos a los que no se ha accedido durante un tiempo determinado en Linux

Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Cambiar el nombre de todos los archivos y nombres de directorios a minúsculas en Linux

  3. Cómo eliminar archivos y directorios en Linux desde la línea de comandos

  4. Linux Eliminar archivos y directorios

  5. Cómo encontrar y eliminar archivos anteriores a un período de tiempo particular en Linux

Cómo copiar archivos y directorios en Linux

Cómo contar archivos en el directorio en Linux

Cómo encontrar y eliminar archivos duplicados en Linux

Las 3 mejores herramientas para buscar y eliminar archivos duplicados en Linux

Cómo eliminar archivos anteriores a los días especificados en Linux

Linux:busque el número de archivos en un directorio y subdirectorios