J'ai besoin de sauvegarder quotidiennement les données et les fichiers de configuration sur ce serveur. Je dois garder:
- sauvegardes quotidiennes pendant une semaine
- sauvegardes hebdomadaires pendant un mois
- sauvegardes mensuelles pendant un an
- sauvegardes annuelles après cela
Tout cela accompli via un script shell exécuté quotidiennement à partir de cron.
Voici à quoi devraient ressembler les fichiers de sauvegarde après 10 ans de fonctionnement:
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
Réponses:
Vous êtes sérieusement en train de trop l'ingénierie. Mal.
Voici un pseudocode:
daily
répertoiredaily
sauvegardesweekly
répertoireweekly
sauvegardesmonthly
répertoiremonthly
sauvegardesyearly
répertoireLa quantité de logique que vous devez implémenter est à peu près la même, hein? BAISER.
Cela semble plus simple:
Ou, par nombre de fichiers au lieu de l'âge:
la source
Si vous souhaitez simplement conserver, par exemple, 8 sauvegardes quotidiennes et 5 sauvegardes hebdomadaires (tous les dimanches), cela fonctionne comme ceci:
À compter d'aujourd'hui (2014-11-10), cela produira:
Comme un exercice qui vous reste, il vous suffit de supprimer tous les fichiers de sauvegarde dont les noms n'apparaissent pas dans le
keep
tableau.Si vous souhaitez conserver 13 sauvegardes mensuelles (le premier dimanche de chaque mois) et 6 sauvegardes annuelles (le premier dimanche de chaque année), les choses deviennent un peu plus compliquées:
À compter d'aujourd'hui (2014-11-10), cela produira:
Comme ci-dessus, supprimez simplement tous les fichiers de sauvegarde introuvables dans ce tableau.
la source
rm /dir/*.* except keep[@]
?Comme mentionné dans un commentaire, il est généralement préférable de déléguer la tâche de gestion des sauvegardes à un logiciel de gestion des sauvegardes.
Mais voici la logique de bash pour supprimer les anciennes sauvegardes selon vos besoins
Code PHP indiquant quels fichiers resteront après avoir fonctionné pendant 3520 jours
https://ideone.com/n2ymQy
la source