#!/bin/sh # # Script de sauvegarde simple # # Version 0.4 - du 02/05/05 # Auteur: Bruno Berteau # script sous licence GPL # # Utilisation ./script fichier_de_conf # # if [ -n "$1" ] then if [ -f "$1" ] then source $1 else echo "Le fichier de configuration \"$1\" n'existe pas" exit -1 fi else echo "utilisation: $0 fichier_de_conf" exit -1; fi # Ajouter un test sur variables # SOURCE, DESTINATION, FICHIER, LOG, JOURS # if [ ! -n "$SOURCE" ] then echo "SOURCE: non défini dans le fichier de configuration" exit -1 # On vérifie que le répertoire existe else if [ ! -d "$SOURCE" ] then echo "Le dossier $SOURCE n'existe pas !" exit -1 fi fi # if [ ! -n "$DESTINATION" ] then echo "DESTINATION: non défini dans le fichier de configuration" # On vérifie l'existance de $DESTINATION else if [ ! -d "$DESTINATION" ] then echo "Le dossier $DESTINATION n'existe pas !" exit -1 fi fi # if [ ! -n "$FICHIER" ] then echo "FICHIER: non défini dans le fichier de configuration" exit -1 fi # if [ ! -n "$LOG" ] then echo "LOG: non défini dans le fichier de configuration" exit -1 fi # if [ ! -n "$JOURS" ] then echo "JOURS: non défini dans le fichier de configuration" exit -1 fi if [ ! -n "$F_DATE" ] then F_DATE="+%Y-%m-%d"; fi # # On ajoute la date à la fin du nom de l'archive NOMFICHIER="$FICHIER"-`/bin/date "$F_DATE"`.tar.bz2 # # Ajoute le nom de la dernière sauvegarde dans le journal echo "$NOMFICHIER" >> "$LOG" # # Nombre d'entrées dans le journal NB=`cat "$LOG" | wc -l` # # Enlève les éventuels doublons dans le journal cat "$LOG" | uniq > "$LOG.bak" mv "$LOG.bak" "$LOG" # # Boucle pour effacer les fichiers en trop while [ "$JOURS" -lt "$NB" ] do # Récupère le premier nom de fichier dans le journal AEFFACER="$DESTINATION"/`tail -r "$LOG" | tail -n 1` # # Si l'archive existe on l'efface if [[ -e "$AEFFACER" ]] then /bin/rm "$AEFFACER" fi # nouveau journal sans le nom du fichier effacé # et enlève les doublons dans les noms cat "$LOG" | uniq | grep -n -e '^.*$' | grep -v "^1\:" | sed 's/^[0-9]*\://' > "$LOG.bak" # on remplace le journal par le nouveau /bin/mv "$LOG.bak" "$LOG" NB=`cat "$LOG" | wc -l` done # # on fait la sauvegarde et on enregistre le nom du fichier dans le journal tar -jcf "$DESTINATION/$NOMFICHIER" "$SOURCE"