Bonjour
voici un script que j'utilise pour sauvegarder mes fichiers.
Le script est basé sur rsync
Au premier lancement, il vous pose des questions (dossiers à sauvegarder, destination..), et consigne tout cela dans un fichier
de configuration situé dans votre homedir ($HOME/.backupme/backupme.cfg)
Chez moi ce fichier ressemble à ça :
#mode de sauvegarde
#MODE=compress
#A sauver (ex: SAVE=/home/brice...). Utiliser une ligne SAVE par répertoire source
SAVE=/home/brice
SAVE=/etc
#Destination (ex: DEST=...)
DEST=/media/MyPassport/save/ubuntu
#Dossiers à exclure (ex: EXDR=/home/brice/musique...). Utiliser une ligne EXDR par dossier à exclure
EXDR=/home/brice/Musique
EXDR=/home/brice/Téléchargements
EXDR=/home/brice/jeux
EXDR=/home/brice/sauveUSB
EXDR=/home/brice/Vidéos
EXDR=/home/brice/.wine
EXDR=/home/brice/.wine-prefix
#Types de fichiers à exclure (noms séparés par un espace ex: *.avi *.mp3)
EXTP=mp3,iso
Lorsque vous lancez le script, il vous rappelle la configuration choisie :
brice@brice-desktop:~$ backupme
CONFIGURATION ACTUELLE:
SAVE=/home/brice
SAVE=/etc
DEST=/media/MyPassport/save/ubuntu
EXDR=/home/brice/Musique
EXDR=/home/brice/Téléchargements
EXDR=/home/brice/jeux
EXDR=/home/brice/sauveUSB
EXDR=/home/brice/Vidéos
EXDR=/home/brice/.wine
EXDR=/home/brice/.wine-prefix
EXTP=mp3,iso
Lancer la sauvegarde ?(o/n):
Et voici le code du script :
#!/bin/bash
# ' ----------------------------------------------------------------------------------------------
# ' OBJET : sauvegarde
# '
# '
# ' Version Date Auteur Objet
# ' --------------------------------------------------------------------------------------------
# ' V1 19/10/11 BMAU Creation
# ' V2 20/10/11 BMAU IHM pour generer un fichier de configuration
# ' V3 07/11/11 BMAU Prise en compte des dossiers a exclure
# ' V4 15/11/11 BMAU Prise en compte de NTFS
#set -x
#IFS="%"
TITRE="BackupMe"
VERSION="V4"
CHLOG="resultat_backup.log"
REPCONF="$HOME/.backupme"
CHCFG="$REPCONF/backupme.cfg"
#formatage de la date en YYYYmmdd
sdate=`date +%Y%m%d`
#formatage de l'heure en HHmm
sheure=`date +%H%M%S`
#####FUNCTION##################################################################
###############################################################################
#R?p?r le nom du repertoire d'un chemin passe en param
GetRepName() {
local tmp=`echo $1 | awk -F "/" '{print $NF}'`
if [ -z "$tmp" ];then
tmp=`echo $1 | awk -F "/" '{print $(NF-1)}'`
fi
echo "$tmp"
}
#tronquer la chaine $1 avec la chaine $2
#si la chaine $1 commence par la chaine $2
TroncChem() {
local tmp=`echo "$1" | awk -F "$2" '{print $2}'`
if echo "$1" | egrep "^$2" 1> /dev/null;then
echo "$tmp"
fi
}
#tester si une commande
TestCmde() {
if which $1 &> /dev/null ;then
return 0
else
return 1
fi
}
#Renvoie le type de système de fichier du répertoire passé en param.
TestFileSystem() {
local tmp=`df -T $1 | awk 'END {print $2}'`
echo $tmp
}
#creer un fichier de configuration
#param: un fichier
GenerConf() {
local tabrep
local dest
local i=0
while true; do
echo -n "Repertoire a sauvegarder:"
read tabrep[$i]
echo ''
echo -n "Sauvegarder un autre repertoire ?(o/n):"
read continue
if [ "$continue" == "n" ]; then
break
else
((i++))
fi
done
echo ''
echo -n "Repertoire de destination:"
read dest
echo ''
echo '##mode de sauvegarde' > $1
echo '#MODE=compress' >> $1
echo '' >> $1
echo "#A sauver (ex: SAVE=$HOME...). Utiliser une ligne SAVE par répertoire source" >> $1
for ((i=0 ; i < ${#tabrep[*]} ; i++)); do
echo "SAVE=${tabrep[$i]}" >> $1
done
echo '' >> $1
echo '#Destination (ex: DEST=...)' >> $1
echo "DEST=$dest" >> $1
echo '' >> $1
echo "#Dossiers à exclure (ex: EXDR=$HOME/musique...). Utiliser une ligne EXDR par dossier à exclure" >> $1
echo "#EXDR=$HOME/musique" >> $1
echo '' >> $1
echo '#Types de fichiers à exclure (noms séparés par un espace ex: *.avi *.mp3)' >> $1
echo '#EXTP=avi,mp3,wma,mov' >> $1
echo '' >> $1
}
LireConf() {
while read line ; do
if [ "${line:0:1}" != "#" ]; then
echo "$line"
fi
done < $1
}
######MAIN######################################################################
################################################################################
#test de la commande rsync
if ! TestCmde rsync ; then
echo "commande rsync non trouve"
exit 1
fi
#test et creation repconf
if [ ! -e $REPCONF ];then
mkdir $REPCONF
fi
#creation d'un fichier de configuration
if [ ! -e $CHCFG ];then
GenerConf $CHCFG
fi
#lecture du fichier de configuration
if [ -e $CHCFG ];then
echo ''
echo "CONFIGURATION ACTUELLE:"
LireConf $CHCFG
echo -n "Lancer la sauvegarde ?(o/n):"
read continue
if [ "$continue" == "n" ]; then
exit 0
fi
fi
i=0
k=0
while read line; do
if [ "${line:0:1}" != "#" ]; then
case "${line:0:4}" in
"MODE")
mode=`echo $line | awk -F "=" '{print $NF}'`;;
"SAVE")
tabsave[$i]=`echo $line | awk -F "=" '{print $NF}'`
((i++));;
"DEST")
dest=`echo $line | awk -F "=" '{print $NF}'`;;
"EXDR")
tabexdir[$k]=`echo $line | awk -F "=" '{print $NF}'`
((k++));;
"EXTP")
extyp=`echo $line | awk -F "=" '{print $NF}'`;;
esac
fi
done < $CHCFG
#traitemet
#->répertoire àauvegarder
for ((i=0 ; i<${#tabsave[*]} ; i++)); do
if [ -e "${tabsave[$i]}" ]; then
if [ ! -e "$dest" ]; then
mkdir "$dest"
if [ $? -nq 0 ]; then
echo "Le dossier $dest n'a pas pu etre cree"
exit 1
fi
fi
#mode pour la compression des donnees
if [ "$mode" == "compress" ]; then
m="z"
fi
#exclusion selon les types definis dans EXTP
if [ ! -z $extyp ]; then
lstex="$REPCONF/list"
echo "$extyp" | awk -F "," '{
for (i=1;i<=NF;i++){
print "*."$i
}
}' > $lstex
opt='--exclude-from'
fi
#exclusion des repertoire definis par EXDR
if [ ! -z ${tabexdir[0]} ]; then
lstex="$REPCONF/list"
for ((k=0 ; k<${#tabexdir[*]} ; k++));do
rep=`GetRepName "${tabsave[$i]}"`
ssrep=`TroncChem "${tabexdir[$k]}" "${tabsave[$i]}"`
if [ ! -z $ssrep ]; then
echo $rep$ssrep >> $lstex
fi
done
opt='--exclude-from'
fi
tmp=`TestFileSystem $dest`
case "$tmp" in
"ntfs")
rsync -rltDuv$m --del --ignore-errors --force $opt $lstex "${tabsave[$i]}" "$dest";;
"fuseblk")
rsync -rltDuv$m --del --ignore-errors --force $opt $lstex "${tabsave[$i]}" "$dest";;
"vfat")
rsync -rltDuv$m --del --ignore-errors --force $opt $lstex "${tabsave[$i]}" "$dest";;
*)
rsync -auv$m --del --ignore-errors --force $opt $lstex "${tabsave[$i]}" "$dest";;
esac
fi
done
if [ -e $lstex ]; then
rm -f $lstex
fi
#IFS=" "