# \[BASH\] Rsync unilatéral pour sauvegarde

**URL:** <https://www.debian-fr.org/t/bash-rsync-unilateral-pour-sauvegarde/67153>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 9:57 UTC](https://www.debian-fr.org/t/bash-rsync-unilateral-pour-sauvegarde/67153 "2016-02-21T21:57:48Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Maxdeconde](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/4491bb/32.png) [@Maxdeconde](https://www.debian-fr.org/u/Maxdeconde)\
**Post date:** [Février 21, 2016, 9:57 UTC](https://www.debian-fr.org/t/bash-rsync-unilateral-pour-sauvegarde/67153/1 "2016-02-21T21:57:48Z")

</div>

Bonjour,

J’ai écrit un petit script de sauvegarde unilatéral d’un dédié vers la maison.

Je dois mettre en paramètre le chemin d’un répertoire du dédié, et le script se lance.

Lorsque je mets en paramètre le dossier “/etc”, ça roule.  
Lorsque je mets en paramètre le dossier “/home/owncloud”, ça coince.  
Voici mon retour de BASH :

```auto
root@web:/home/temp/# sh /home/temp/scripts/Script_Sauvegarde_Folder_Skeleton.sh /home/owncloud
Montage du /sauvegarde_dedie/home/owncloud en cours
Sauvegarde de /home/owncloud
on est dans le if
/home/temp/scripts/Script_Sauvegarde_Folder_Skeleton.sh: ligne 68: /home/temp/log/home/owncloud_20151007_15h46.txt: Aucun fichier ou dossier de ce type
RSYNC /home/owncloud: OK
/home/temp/log/home/owncloud_20151007_15h46.txt: Aucun fichier ou dossier de ce type
rm: impossible de supprimer « /home/temp/log/home/owncloud_20151007_15h46.txt »: Aucun fichier ou dossier de ce type
```

Voici mon script :

[code]#!/bin/bash  
#La version actuelle a été finalisée le 30 mai 2015  
#Script de sauvegarde d’un dossier pris en paramètre vers le NAS de la maison

# Chaque rsync a un log qui lui est propre et qui est envoyé par mail puis supprimé.

##################################### VARIABLES/CONSTANTES ###########################################

#Dossier à sauvegarder pris en paramètre  
dossier=$@

#Prise de la date de début de script pour connaître le temps qu’il a fallu pour l’ecécuter  
date\_debut=`date`

#Prise de la date du jour pour les fichiers spécifiques de sauvegarde (sql,logs,…)  
datedujour=`date +%Y%m%d_%Hh%M`

#Chemin de la source de la sauvegarde  
chemin\_source="$dossier"

#Chemin de la destination // NE PAS OUBLIER LE $dossier pour réaliser un point de montage unique.

# Créer le dossier à la mano

chemin\_dest="/home/temp$dossier"

#Adresse du service distant  
serveur\_distant="-p 763 [maxime@serveur.DOMAINE.fr](mailto:maxime@serveur.DOMAINE.fr)"

#Répertoire du serveur distant

# NE PAS OUBLIER LE / au début du chemin, sinon le point de montage ne supporte pas le rsync

repertoire\_distant="/sauvegarde\_dedie$dossier"

#Chemin log  
chemin\_log="/home/temp/log"  
date\_acte=`date +%Y%m%d_%Hh%M`  
extension\_fichier="$@\_$date\_acte"  
log="$chemin\_log$extension\_fichier.txt"

#touch $log

#################################### VERIFICATION DU PAMARMETRE SAISI ##############################

if [“$dossier” = “”]  
then  
echo "Vous avez oublié de saisir un paramètre, veuillez relancer le script"  
exit  
fi

####################################### MONTAGE NAS ######################################

if [$(mount | grep “$repertoire\_distant” | wc -l) == 1]  
then  
echo "Montage du $repertoire\_distant déjà fait"  
else  
echo "Montage du $repertoire\_distant en cours"  
sshfs $serveur\_distant:$repertoire\_distant $chemin\_dest

```
    #Si le montage est effectif, alors faire la synchro, sinon passer à la suite
    if [$(mount | grep "$repertoire_distant" | wc -l) == 1]
    then
        echo "Sauvegarde de $dossier"
      #date pour le log
      date_acte=`date +%Y%m%d_%Hh%M`
      extension_fichier="$service_LOG_$date_acte"

      if [$dossier == "/etc"]
       echo "on est dans le if"
       then rsync -av --delete --omit-dir-times $chemin_source/ $chemin_dest/ > $log

      else rsync -av --delete $chemin_source/ $chemin_dest/ > $log
      fi

      echo "RSYNC $dossier: OK"
      umount $chemin_dest

      date_fin=`date`

      echo "Franc succès de la sauvegarde de $dossier commencée le : "$date_debut" et terminée le : "$date_fin | mail -s "RSYNC $dossier OK" -a $log maxime@DOMAINE.fr

      rm $log

    else
            echo "La synchro de $dossier impossible le $date_acte" | mail -s "Echec de la Synchro $dossier" maxime@mDOMAINE.fr

    fi

```

fi

[/code]

Une idée de la source du problème ?

Merci pour votre lecture.

P.S : Le terme “on est dans le if” n’est pas censé apparaître puisque je ne suis pas avec le répertoire “/etc” mais “/home/owncloud” la condition ne fonctionne donc pas… Mais pourquoi ?

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 21, 2016, 9:57 UTC](https://www.debian-fr.org/t/bash-rsync-unilateral-pour-sauvegarde/67153/2 "2016-02-21T21:57:59Z")

</div>

```auto
if [$dossier == "/etc"]
           echo "on est dans le if"
           then rsync -av --delete --omit-dir-times $chemin_source/ $chemin_dest/ > $log
```

Ton ‘then’ est trop tard. Il faudrait mettre plutôt :

```auto
if [$dossier == "/etc"]
           then echo "on est dans le if"
           rsync -av --delete --omit-dir-times $chemin_source/ $chemin_dest/ > $log
```

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 21, 2016, 9:57 UTC](https://www.debian-fr.org/t/bash-rsync-unilateral-pour-sauvegarde/67153/3 "2016-02-21T21:57:59Z")

</div>

```auto
chemin_log="/home/temp/log"
date_acte=`date +%Y%m%d_%Hh%M`
extension_fichier="$@_$date_acte"
log="$chemin_log$extension_fichier.txt"
```

Tu concatène le chemin du dossier à sauvegarder, donc si tu veux sauvegarder un sous-dossier, il va vouloir descendre de la même manière. Du coup pour ‘/home/owncloud’ le chemin du log est '/home/temp/log/home/owncloud\_$date\_acte.txt’  
Et comme le dossier /home/temp/log/home n’existe pas, tu as le message d’erreur (« Aucun fichier ou dossier de ce type »).

Tu peux faire :

```auto

```

(le chemin sera alors /home/temp/log/_home\_ownloud_$date\_acte.txt)

---

<div class="post-metadata">

**Author:** ![Maxdeconde](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/4491bb/32.png) [@Maxdeconde](https://www.debian-fr.org/u/Maxdeconde)\
**Post date:** [Février 21, 2016, 9:58 UTC](https://www.debian-fr.org/t/bash-rsync-unilateral-pour-sauvegarde/67153/4 "2016-02-21T21:58:13Z")

</div>

Merci mon sauveur, tout est rentré dans l’ordre ^^
