#1 Le 07/04/2012, à 11:14
- brisco
[Script] sauvegarder ses fichiers sur un disque externe avec rsync
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=" "
Hors ligne