Recherche script sauvegarde répertoire, compression puis envois FTP


#1

Bonsoir,

J’ai testé plusieurs scripts bash que j’ai trouvé sur google mais pas un ne fonctionne correctement ou il y a des variables que je ne comprends pas.

Voic par exemple un script qui pourrait fonctionner mais je ne comprends pas
ce qu’il faut indiquer à la requete :

nom=`basename $source`
nom2=`basename $source2`

Voic le script :

#!/bin/bash
# Informations sur le serveur FTP
hostname=srv
ftp_serveur=adresse_ip
username=user
password=password
# Repertoires à sauvegarder
source="/home/user/Images"
source2="/home/user/Documents"
# Repertoire ou sera enregistré la sauvegarde locale
destination="/home/user/`date +%d-%B-%Y `"
# Format de la date
date=`date +%d-%B-%Y`
# http://manpagesfr.free.fr/man/man3/basename.3.html
nom=`basename $source`
nom2=`basename $source2`
# Emplacement des logs
log="/home/user/FTP/Sauvegarde-FTP-$date"
# Rétention / rotation des sauvegardes ( 7 jours )
retention=`date +%d-%B-%Y --date='7 day ago'`
# Si le répertoire de sauvegarde local n'existe pas, il sera crée
if [ ! -d $destination ] ;then
mkdir $destination && cd $destination
fi
echo "Début de la sauvegarde le $date à `date +%HH%M` " > $log 
# Compression des dossiers en .tar,gz
echo "Compression des dossiers débutée à `date +%HH%M` " >> $log
tar -czf $destination/$nom-$date.tar.gz -C $source/.. $nom
tar -czf $destination/$nom2-$date.tar.gz -C $source2/.. $nom2
# Statut de la compression
status=$?
case $status in
0) echo "Compression des dossiers terminée à `date +%HH%M`" >> $log ;;
1) echo "Une erreur s'est produite lors de la compression des dossiers" >> $log && exit;;
esac
echo "Envoi des fichiers sur $hostname à `date +%HH%M`" >> $log
# Envoi de la sauvegarde locale vers le serveur FTP
lftp ftp://$username:$password@$ftp_serveur -e "mirror -e -R $destination /home/user/$date;quit" >> $log
# Rotation des sauvegardes
lftp ftp://$username:$password@$ftp_serveur -e "rm -rf $retention;quit"
echo "Sauvegarde terminée le $date à `date +%HH%M`" >> $log
# Suppression du répertoire de sauvegarde local
rm -rf $destination
# Statut de la suppression
status=$?
case $status in
0) echo "Suppression du répertoire de sauvegarde local terminé à `date +%HH%M`" >> $log ;;
1) echo "Une erreur s'est produite lors de la suppression" >> $log && exit;;
esac

Merci a vous ou si vous avez un script sous le coude je suis preneur.

Cordialement


#2

Bonjour

Il ne faut rien indiquer du tout,
ce sont des lignes de commandes qui vont utiliser des variables (source et source2)
auxquelles tu avais sans doute déjà attribué une valeur,
quelques lignes plus haut dans le même script, juste en dessous de la ligne de commentaire :

# Repertoires à sauvegarder

Un exemple d’attribution d’une valeur à une variable
et l’affichage de la valeur attribuée à cette variable :

michel@debg53sw:~$ maVariable="valeur contenue dans ma variable"
michel@debg53sw:~$ 
michel@debg53sw:~$ echo $maVariable
valeur contenue dans ma variable
michel@debg53sw:~$

Un autre exemple,
en utilisant les variables de ton script

michel@debg53sw:~$ source="/home/user/Images"
michel@debg53sw:~$ source2="/home/user/Documents"
michel@debg53sw:~$ 
michel@debg53sw:~$ echo $source
/home/user/Images
michel@debg53sw:~$ 
michel@debg53sw:~$ echo $source2
/home/user/Documents
michel@debg53sw:~$ 

La commande basename retourne le nom du fichier (ou répertoire)
sans le chemin vers ce fichier ( <=> tout ce qu’il y a après le dernier caractère / )

Pour plus de détails au sujet de la commande basename
voir le retour de la ligne de commande suivante :

man basename

Donc :

michel@debg53sw:~$ basename /mon/chemin/vers/monFichier.txt
monFichier.txt
michel@debg53sw:~$ basename /mon/chemin/vers/monNomDeRépertoireOuAutre
monNomDeRépertoireOuAutre
michel@debg53sw:~$ 
michel@debg53sw:~$ source2="/home/user/Documents"
michel@debg53sw:~$ 
michel@debg53sw:~$ nom2=`basename $source2`
michel@debg53sw:~$ 
michel@debg53sw:~$ echo $nom2
Documents
michel@debg53sw:~$ 

NOTE :

À la place de :

nom2=`basename $source2`

on préfère écrire :

nom2=$(basename $source2)

#3

Je vous remercie MicP sa a l’aire de focntionner

@ + et encore merci pour l’explication

Cordialement