Haz todo lo posible por entender el código de forma correcta previamente a usarlo a tu proyecto si tdeseas aportar algo puedes compartirlo con nosotros.
Puedes usar find
. Calcular la fecha de acuerdo a 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, encontrar archivos creado 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 quieres el tiempo 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
posee -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, añade lo necesario. -name "DBG_A_sql*"
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 nada de eso, 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
Sección de Reseñas y Valoraciones
Si te sientes suscitado, eres capaz de dejar un artículo acerca de qué te ha impresionado de este ensayo.