w3.nonsenz.org

Script bash de sauvegarde de répertoires et de fichiers

Cette page a pour but de proposer un script BASH qui permet de sauvegarder des données.

Dans le détail, il effectue plusieurs opérations :

L'option -m en paramêtre permet de spécifier la sauvegarde mensuelle.

Voici le script qui permet de faire cela. Le texte en gras est à modifier suivant vos propres paramètres.

#!/bin/sh
#Sauvegarde de tous les fichiers mentionnes en fin du script
#dans un repertoire $REP_SAUV et cree un tar.bz2 chaque jour et chaque mois
#en conservant deux archives quotidennes et mensuelles
#Fait egalement une copie sur une machine distante (serveur)

#variables
#Repertoire ou les fichiers sont copies (sans etre compresses)
REP_SAUV="/home/sauve"
#Repertoire personnel
REP_PERSO="/home/toto"
#Repertoires ou sont stockes les archives
DATE=$(date +%y%m%d)
if [ "$1" = "-m" ] ; then

REP_TAR="/home/tar/monthly"
INTITUL="Sauvegarde mensuelle"

else

REP_TAR="/home/tar/daily"
INTITUL="Sauvegarde quotidienne"

fi
#Repertoire sur une machine distante pour copier les archives
#par ssh (scp)
REP_DIST="machine1:/home/sauve-dist"

####################################################


echo "Sauvegarde en cours..."
cd $REP_TAR
#Vide le repertoire de sauvegarde
rm -rf $REP_SAUV/*
#Prepare le fichier de logs
if [ -e tar.log ] ; then

mv -f tar.log tar.log.old

fi
echo "-------------------------------------------------">>tar.log
echo "Sauvegarde du `date +%A" "%d" "%B" "%Y" - "%T`">>tar.log
echo "$INTITUL">>tar.log
echo "-------------------------------------------------">>tar.log
echo "suppr : OK">>tar.log

# Fonctions ######################

function backup() {
#Creation des repertoires
CIBLE=$REP_SAUV${1%/*}/
if test ! -d $CIBLE
then

mkdir -p $CIBLE

fi
#copie les fichiers
cp -R $1 $CIBLE
}

function backupsql() {
#sauvegarde ne base sql
echo $REP_SAUV/$3.sql >> tar.log
mysqldump -u $1 -p$2 $3 > $REP_SAUV$3.sql
}

function menage() {
for MYFILE in `find $1 -name "sauve*" | sort`;do
NB=`find $1 -name "sauve*" | sort | wc -l`
if (( $NB >= 3 ));then
rm -f $MYFILE
fi
done
}

####################################
#Choisissez ci-dessous les repertoires
#ou fichiers a sauvegarder
####################################
backup /etc/hosts
backup /etc/samba
#scripts d'admin
backup /root/bin
#backup des infos de mail
backup $REP_PERSO/.mozilla-thunderbird
#Sauvegarde des sous-repertoires du
#repertoire perso finissant par -s
for REPER in `find $REP_PERSO/ -name "*-s" | sort`;do
backup $REPER
done

#sqldump des bases mysql
#backupsql identifiant password nomdelabdd

#Cree le tar
ls -lRa $REP_SAUV>>tar.log
tar -cjf sauve_$DATE.tar.bz2 $REP_SAUV 2>>tar.log
scp $REP_TAR/sauve_$DATE.tar.bz2 $REP_DIST/ 2>>tar.log

#Limite le nombre de sauvegardes
menage $REP_TAR/

#Fin du script ok
echo "-------------------------------------------------">>tar.log
echo "`date +%A" "%d" "%B" "%Y" - "%T`">>tar.log
echo "Fin de sauvegarde">>tar.log
echo "-------------------------------------------------">>tar.log
echo "fin du script $0 : OK">>tar.log

 

N.B. Reste à prévoir l'authentification ssh sur machine1 par échange de clés, et à programmer l'exécution du script toutes les nuits, et tous les mois avec l'option -m. Je vous renvoie à cron et crontab pour en apprendre plus.

 

Have fun !

RETOUR

 


hébergé sur Pollux