Aprende a buscar archivos cuya fecha de última modificación sea anterior a x minutos usando bash en linux.

Para el último proyecto en el que he estado trabajando ( removeimagebg.io ), tuve que implementar una función en la que, básicamente, todos los archivos cargados en el servidor deberían eliminarse, donde desde la fecha y la hora de carga, hay una diferencia de 10 minutos para la fecha y hora actual. Esto sucede básicamente porque no podemos permitirnos demasiado almacenamiento y podría convertirse en un problema tarde o temprano debido a la privacidad y todo lo relacionado, por lo que la solución es básicamente programar un cronjob que se ejecuta cada 15 minutos, busca los archivos donde Han pasado 10 minutos desde la hora de subirlos y borrarlos, así de sencillo.

En este artículo, compartiré contigo un comando muy simple para buscar archivos que tengan más de x minutos desde la hora actual y eliminarlos usando bash.

Encontrar los archivos

En lugar de trabajar con el lenguaje de programación del proyecto, decidí simplemente escribir un script muy simple que hace el algoritmo mencionado, así que primero tuve que investigar cómo encontrar los archivos que tienen más de 10 minutos de la hora actual. Para hacer esto, simplemente usé el comando de búsqueda:

find ./your-directory -daystart -maxdepth 1 -mmin +10 -type f

El comando se describe de la siguiente manera:

  • ./your-directory: el directorio absoluto o relativo donde se debe ejecutar la búsqueda. Personalmente recomiendo usar rutas absolutas, evitará posibles dolores de cabeza en el futuro.
  • -daystart: medir los tiempos desde el comienzo de hoy.
  • -maxdepth 1: limitando la búsqueda al directorio específico dado como primer argumento. Puede eliminar esto si tiene subdirectorios donde también se debe ejecutar la búsqueda.
  • -mmin +<minutes>: La opción mmin se usa para buscar archivos/directorios con la última modificación en minutos (reemplace minutos con la cantidad de minutos como un número entero). En nuestro caso, queremos buscar archivos de más de 10 minutos. Si necesita buscar archivos de más de 20 minutos, simplemente use -mmin +20.
  • -type f: limita los resultados de la búsqueda a los archivos.

Es seguro ejecutar el comando anterior ya que solo mostrará la lista de archivos que coinciden con la búsqueda, no se eliminarán ni modificarán, por ejemplo, una posible salida sería:

./your-directory/file1.xd
./your-directory/file2.xd
./your-directory/file87.xd
./your-directory/file12.xd

Filtrado de archivos

Si necesita filtrar los archivos por extensión, nombre de archivo o algo así, no olvide que puede agregar un filtro haciendo uso del -iname parámetro y usar el asterisco como marcador de posición comodín:

# Buscar archivos jpeg de más de 10 minutos
find ./your-directory -daystart -maxdepth 1 -mmin +10 -type f -iname "*.jpeg"

Borrando los archivos

Ahora, como mencioné, el último paso de mi secuencia de comandos fue simplemente eliminar los archivos que coincidían con la búsqueda. Afortunadamente, la parte más problemática estaba hecha. Para eliminar el resultado de su búsqueda, todo lo que necesita hacer es agregar el argumento -delete al comando de búsqueda:

# ADVERTENCIA: ESTO BORRARÁ TODOS LOS ARCHIVOS DEL DIRECTORIO DADO
# CUYA FECHA DE MODIFICACIÓN SEA ANTERIOR A 10 MINUTOS DE LA HORA ACTUAL
find ./your-directory -daystart -maxdepth 1 -mmin +10 -type f -delete

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores