[BASH] Rsync unilatéral pour sauvegarde

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 :

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"

#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 ?

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 :

if [ $dossier == "/etc" ]
           then echo "on est dans le if"
           rsync -av --delete --omit-dir-times $chemin_source/ $chemin_dest/ > $log
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 :

(le chemin sera alors /home/temp/log/home_ownloud$date_acte.txt)

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