Puedes usar find
. Calcule la fecha según su requerimiento y uso,
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print
Después de confirmar que los elimine,
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete
Para empezar, buscar archivos creados en un tiempo determinado es un poco difícil, ya que el tiempo de creación no suele guardarse en ningún lado o es difícil llegar a él. Lo que tienes es mtime
, o la hora de la última modificación, y ctime
que es el tiempo de "cambio", actualizado en cualquier cambio en el inodo. Asumiré que desea la hora de modificación.
Encontrar archivos modificados en una fecha determinada resultó algo interesante, ya que find
parece hacer que sea un poco difícil hacerlo bien con los archivos creados exactamente a la medianoche.
Si conocemos el tiempo relativo (es decir, fue ayer), podríamos usar find -daystart -mtime 1
, pero encuentra el archivo modificado en la medianoche equivocada, Aug 8 00:00
. Sin embargo, esto parece funcionar:
find dir/ -daystart -mtime +0 \! -mtime +1 -ls
Si no desea calcular el tiempo relativo, y su find
tiene -newerXY
:
find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls
Nuevamente, esto hace que los archivos creados exactamente a medianoche sean incorrectos, porque la comparación es "más nueva", no "más nueva o tan antigua como". Aunque si su sistema tiene una precisión de subsegundos para las marcas de tiempo, puede ser difícil dar con eso, pero sucede si prueba con archivos creados por touch
...
Una solución peluda a eso sería algo como esto:
find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls
En cualquier caso, agregue el -name "DBG_A_sql*"
necesario para tomar sólo los archivos con el nombre correcto. Puedes reemplazar el -ls
al final con -delete
para eliminar los archivos en lugar de enumerarlos. (-ls
, -delete
y -newerXY
existen al menos en GNU find y BSD find en OS X.)
Por supuesto, podría analizar la representación de texto de la fecha, pero ls
hace que sea difícil hacerlo bien si algún bromista crea archivos con caracteres no imprimibles en ellos. Claro, los archivos de ejemplo no tienen tal, pero en general, cualquiera podría crearlos, especialmente en /tmp
.
(Aunque con | xargs rm
simplemente perdería esos archivos, y dado que los nombres de los archivos no pueden contener barras, sería difícil para alguien señalar su rm
a otro directorio.)
Solo bash loop
for file in /tmp/DBG_A_sql* ; do
[ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done