Necesito hacer una copia de seguridad de los datos y los archivos de configuración en este servidor, diariamente. Necesito mantener:
- copias de seguridad diarias durante una semana
- copias de seguridad semanales durante un mes
- respaldos mensuales por un año
- copias de seguridad anuales después de eso
Todo esto se logra a través de un script de shell que se ejecuta diariamente desde cron.
Así es como deberían verse los archivos de respaldo después de 10 años de ejecución:
blog-20050103.tar.bz2
blog-20060102.tar.bz2
blog-20070101.tar.bz2
blog-20080107.tar.bz2
blog-20090105.tar.bz2
blog-20100104.tar.bz2
blog-20110103.tar.bz2
blog-20120102.tar.bz2
blog-20130107.tar.bz2
blog-20130902.tar.bz2
blog-20131007.tar.bz2
blog-20131104.tar.bz2
blog-20131202.tar.bz2
blog-20140106.tar.bz2
blog-20140203.tar.bz2
blog-20140303.tar.bz2
blog-20140407.tar.bz2
blog-20140505.tar.bz2
blog-20140602.tar.bz2
blog-20140707.tar.bz2
blog-20140728.tar.bz2
blog-20140804.tar.bz2
blog-20140811.tar.bz2
blog-20140816.tar.bz2
blog-20140817.tar.bz2
blog-20140818.tar.bz2
blog-20140819.tar.bz2
blog-20140820.tar.bz2
blog-20140821.tar.bz2
blog-20140822.tar.bz2
Respuestas:
Estás sobre-diseñando esto en serio. Mal.
Aquí hay un pseudocódigo:
daily
directoriodaily
copias de seguridadweekly
directorioweekly
copias de seguridadmonthly
directoriomonthly
copias de seguridadyearly
directorioLa cantidad de lógica que tienes que implementar es casi la misma, ¿eh? BESO.
Esto parece más fácil:
O, por recuento de archivos en lugar de edad:
fuente
Si solo desea conservar, por ejemplo, 8 copias de seguridad diarias y 5 copias de seguridad semanales (todos los domingos), funciona así:
A partir de hoy (10/11/2014), esto generará:
Como ejercicio que le queda, solo tiene que eliminar todos los archivos de copia de seguridad cuyos nombres no aparecen en la
keep
matriz.Si desea conservar 13 copias de seguridad mensuales (primer domingo de cada mes) y 6 copias de seguridad anuales (primer domingo de cada año), las cosas se vuelven un poco más complicadas:
A partir de hoy (10/11/2014), esto generará:
Igual que el anterior, simplemente elimine todos los archivos de copia de seguridad que no se encuentran en esta matriz.
fuente
rm /dir/*.* except keep[@]
?Como se menciona en un comentario, normalmente es mejor delegar la tarea de administrar copias de seguridad a un software de administración de copias de seguridad.
Pero aquí está la lógica en bash para eliminar copias de seguridad anteriores según sus requisitos
Código PHP que muestra qué archivos permanecerán después de ejecutarse durante 3520 días
https://ideone.com/n2ymQy
fuente