# Recherche script sauvegarde répertoire, compression puis envois FTP

**URL:** <https://www.debian-fr.org/t/recherche-script-sauvegarde-repertoire-compression-puis-envois-ftp/77708>\
**Category:** Programmation\
**Created:** [Octobre 7, 2018, 3:59 UTC](https://www.debian-fr.org/t/recherche-script-sauvegarde-repertoire-compression-puis-envois-ftp/77708 "2018-10-07T15:59:34Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Bratock](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/58f4c7/32.png) [@Bratock](https://www.debian-fr.org/u/Bratock)\
**Post date:** [Octobre 7, 2018, 3:59 UTC](https://www.debian-fr.org/t/recherche-script-sauvegarde-repertoire-compression-puis-envois-ftp/77708/1 "2018-10-07T15:59:35Z")

</div>

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 :

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

```

Voic le script :

```nohighlight
#!/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

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 7, 2018, 5:23 UTC](https://www.debian-fr.org/t/recherche-script-sauvegarde-repertoire-compression-puis-envois-ftp/77708/2 "2018-10-07T17:23:47Z")

</div>

Bonjour

> [@Bratock](#):
>
> …je ne comprends pas  
> ce qu’il faut indiquer à la requete :
> 
> ```plaintext
> nom=`basename $source`
> nom2=`basename $source2`
> 
> ```

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 :

```plaintext
# Repertoires à sauvegarder

```

* * *

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

```plaintext
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

```plaintext
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 :

```plaintext
man basename

```

Donc :

```plaintext
michel@debg53sw:~$ basename /mon/chemin/vers/monFichier.txt
monFichier.txt
michel@debg53sw:~$ basename /mon/chemin/vers/monNomDeRépertoireOuAutre
monNomDeRépertoireOuAutre
michel@debg53sw:~$ 

```

```plaintext
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 :

```plaintext
nom2=`basename $source2`

```

on préfère écrire :

```plaintext
nom2=$(basename $source2)

```

---

<div class="post-metadata">

**Author:** ![Bratock](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/58f4c7/32.png) [@Bratock](https://www.debian-fr.org/u/Bratock)\
**Post date:** [Octobre 7, 2018, 6:14 UTC](https://www.debian-fr.org/t/recherche-script-sauvegarde-repertoire-compression-puis-envois-ftp/77708/3 "2018-10-07T18:14:52Z")

</div>

Je vous remercie MicP sa a l’aire de focntionner

@ + et encore merci pour l’explication

Cordialement
