Evolution script sauvegarde-2

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

Bonsoir à Toutes et Tous :icon_biggrin:

Je fais suite à la première discussion, d'amélioration, donc, d'évolution, puisque c'est positif :icon_biggrin: de cette discussion, et pour alléger la dite discussion :wink: qui est ici .

Je reprends certains de vos commentaires, et... les commente :wink:
MicP a écrit : 13 sept. 2017, 14:05 Tel quel, je viens d'en refaire une version
en utilisant des if then else

Code : Tout sélectionner

#!/bin/bash
#
# Ce script permet de faire une sauvegarde incrémentale manuelle avec "rsync"
# Il peut être lancé à partir d'un bouton personnalisé dans un tableau de bord.
#

# Variables de couleurs
VERT="\\033[1;32m"
STNDT="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
# pour donner un nom "raccourci" (incluant le chemin) au fichier backuperror0.log :
backup="/home/bernard/bin/Sauvegardes/backuperror0Del-portable_Sauv1T_500go_SSD224Go.log"

echo -e "${BLEU}Exécuter la sauvegarde ? [o/N]${STNDT}"

read -sn1
[[ $REPLY =~ [yYoO] ]] || { echo -e "${ROUGE}Abandon sauvegarde.${STNDT}\nSortie Sauvegarde"; exit; }

echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde le : $(date +%d-%m-%Y à %T)${STNDT}"
echo -e "${ROSE}-----------\nSynchronisation en cours...\n ------------${STNDT}"


#SSD224Go
mountPnt="/media/bernard/SSD224Go"
repSauvg="${mountPnt}"
msgColor="${ROSE}"

if $(mountpoint "${mountPnt}" -q); then
    echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------${STNDT}"
    repPerso="/home/bernard"
    rsync -a -P --del --stats "${repPerso}/DocumentsPerso" "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesDocuments"   "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesPhotos"      "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesScripts"     "${repSauvg}"  2>> "${backup}"
else
    echo "Attention, ${mountPnt} absent"
fi

#DDSauv1To-a
mountPnt="/media/bernard/Sauv1To-a"
repSauvg="${mountPnt}/SauvDdPrincipal1"
msgColor="${ROSE}"

if $(mountpoint "${mountPnt}" -q); then
    if [ -d "${repSauvg}" ]; then
        echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------${STNDT}"
        rsync -a -P --del --stats /home "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /etc  "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /var  "${repSauvg}"  2>> "${backup}"
    else
        echo "Attention, répertoire ${repSauvg} absent"
    fi
else
    echo "Attention, ${mountPnt} absent"
fi

#DD500Go
mountPnt="/media/usb0"
repSauvg="${mountPnt}/SauvDdPrincipal2"
msgColor="${BLEU}"

if $(mountpoint "${mountPnt}" -q); then
    if [ -d "${repSauvg}" ]; then
        echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------${STNDT}"
        rsync -a -P --del --stats /home "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /etc  "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /var  "${repSauvg}"  2>> "${backup}"
    else
        echo "Attention, répertoire ${repSauvg} absent"
    fi
else
    echo "Attention, ${mountPnt} absent"
fi

#========
if [ -s "${backup}" ]; then
    echo "Sauvegarde terminée : $(date +%d-%m-%Y à %T)\n"
else
    echo "Procédure interrompue par l'utilisateur."
fi

read -p "Pour fermer le programme de sauvegarde : Ctrl + C"

# ---- fin du script ----
En espérant que ça fonctionne…

=======
DbFr871 a écrit :
il y en aurait une qui me vient dés à présent, c'est celle d'informer que le support "x" est absent, avec une validation de l'info, éventuellement... mais pas du tout obligé, et que le script continue à sauvegarder sur les supports présents...

Qu'est-ce que Vous en pensez ?
je pense qu'il n'y a que toi qui peut définir la façon dont tu veux voir fonctionner ce script
puisque c'est en fonction de ce que tu veux en faire et en fonction du contexte dans lequel il va devoir fonctionner.

Il serait sans doute assez long et fastidieux de décrire ce contexte et la façon dont tu veux l'utiliser,
et d'un autre côté, lister toutes les possibilités est tout aussi difficile, sans compter que je ne les connais pas toutes,
et qu'il y a des personnes beaucoup plus compétentes que moi.
.

MicP, tu y as répondu, en remettant les conditions, ce qui fait que si un support est absent, le script passe au support suivant, donc, c'est nickel :023:

Je pourrai presque inscrire "résolu"...
mais il y a peut-être, d'autres idées qui vont suivre, de mi, et surtout... de Vous :icon_biggrin:

edit 1
Comme il y avait quelques erreurs sur la date et heure, ainsi que sur les couleurs des différents supports, voici le script qui tourne nickel, et qui prend la couleur souhaitée, en affichant l'heure et la date :

Code : Tout sélectionner

#!/bin/bash
#
# Ce script permet de faire une sauvegarde incrémentale manuelle avec "rsync"
# Il peut être lancé à partir d'un bouton personnalisé dans un tableau de bord.

# Variables de couleurs
VERT="\\033[1;32m"
STNDT="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
Date=$(date +%d-%m-%Y)
Heure=$(date +%T)
# pour donner un nom "raccourci" (incluant le chemin) au fichier backuperror0.log :
backup="/home/bernard/bin/Sauvegardes/backuperror0Del-portable_Sauv1T_500go_SSD224Go.log"

echo -e "${BLEU}Exécuter la sauvegarde ? [o/N]"

read -sn1
[[ $REPLY =~ [yYoO] ]] || { echo -e "${ROUGE}Abandon sauvegarde.${STNDT}\nSortie Sauvegarde"; exit; }

echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde  à : $Heure le $Date"
echo -e "${ROSE}-----------\nSynchronisation en cours...\n ------------"

#SSD224Go=====
mountPnt="/media/bernard/SSD224Go"
repSauvg="${mountPnt}"
msgColor="${CYAN}"

if $(mountpoint "${mountPnt}" -q); then
    echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------"
    repPerso="/home/bernard"
    rsync -a -P --del --stats "${repPerso}/DocumentsPerso" "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesDocuments"   "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesPhotos"      "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesScripts"     "${repSauvg}"  2>> "${backup}"
else
    echo "Attention, ${mountPnt} absent"
fi

#DDSauv1To-a=====
mountPnt="/media/bernard/Sauv1To-a"
repSauvg="${mountPnt}/SauvDdPrincipal1"
msgColor="${ROSE}"

if $(mountpoint "${mountPnt}" -q); then
    if [ -d "${repSauvg}" ]; then
        echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------"
        rsync -a -P --del --stats /home "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /etc  "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /var  "${repSauvg}"  2>> "${backup}"
    else
        echo "Attention, répertoire ${repSauvg} absent"
    fi
else
    echo "Attention, ${mountPnt} absent"
fi

#DD500Go=====
mountPnt="/media/usb0"
repSauvg="${mountPnt}/SauvDdPrincipal2"
msgColor="${BLEU}"

if $(mountpoint "${mountPnt}" -q); then
    if [ -d "${repSauvg}" ]; then
        echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------"
        rsync -a -P --del --stats /home "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /etc  "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /var  "${repSauvg}"  2>> "${backup}"
    else
        echo "Attention, répertoire ${repSauvg} absent"
    fi
else
    echo "Attention, ${mountPnt} absent"
fi

#========
if [ -s "${backup}" ]; then
    echo -e $STNDT "Sauvegarde terminée  à : $Heure le $Date"
else
    echo -e $STNDT "Procédure interrompue par l'utilisateur à : $Heure le $Date."
fi

read -p "Pour fermer le programme de sauvegarde : Ctrl + C"

# ---- fin du script ----
Il y a beaucoup d'explications que sur le mien, mais, je vais les remettre, pour éclairer celles et ceux qui souhaitent comprendre, quitte à les supprimer après en avoir pris connaissance :icon_biggrin:


EDIT 2
MicP a écrit : 13 sept. 2017, 14:05...
MicP j'ai trouvé où l'heure et la date coinçaient, c'était ici :

Code : Tout sélectionner

echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde le : $(date +%d-%m-%Y) à $(date +%T)"
Hé, hé... cela fait "gagner" deux lignes... :wink:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

piratebab a écrit : 13 sept. 2017, 12:30 1/ amélioration: avoir un fichier de log qui enregistre le résultat de l'opération.
2/ amélioration: avoir un switch qui permet d'avoir une version en lancement manuel, et une autre en lancement auto.
3/ amélioration: le rendre plus modulaire afin d'ajouter facilement des support ou des rep de sauvegarde
.
1/ j'ai fait un fichier de suivi de sauvegarde, qui inscrit les erreurs :

Code : Tout sélectionner

...
# pour donner un nom "raccourci" (incluant le chemin) au fichier backuperror0.log :
backup=/home/bernard/bin/Sauvegardes/backuperror0Del-portable_Sauv1T_500go_SSD224Go.log
#
...
.

je t'en fais un extrait pour voir, si cela est juste ou demande à être amélioré :
erreurs signalées

...
vendredi 8 septembre 2017, 09:35:16 (UTC+0200)
vendredi 8 septembre 2017, 11:30:03 (UTC+0200)
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
vendredi 8 septembre 2017, 11:32:17 (UTC+0200)
...


sans erreur

...
mercredi 13 septembre 2017, 13:02:00 (UTC+0200)
mercredi 13 septembre 2017, 13:06:06 (UTC+0200)
mercredi 13 septembre 2017, 16:09:50 (UTC+0200)
...


tout cela dans le même fichier :icon_biggrin:

+++++++++++++++++++++++++++++++++

2/ voui, avoir la possibilité de le mettre en automatique... tout en gardant celle de le lancer manuellement :wink:

+++++++++++++++++++++++++++++++++

3/ ah là, cela serait pratiquement le top... l'ajout de support supplémentaire... :icon_biggrin:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

Voici le script avec des commentaires explicatifs :

Code : Tout sélectionner

#!/bin/bash
#
# Ce script permet de faire une sauvegarde incrémentale manuelle avec "rsync"
# Il peut être lancé à partir d'un bouton personnalisé dans un tableau de bord.

# Variables de couleurs
VERT="\\033[1;32m"
STNDT="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
# pour donner un nom "raccourci" (incluant le chemin) au fichier backuperror0.log :
backup="/home/bernard/bin/Sauvegardes/backuperror0Del-portable_Sauv1T_500go_SSD224Go.log"

echo -e "${BLEU}Exécuter la sauvegarde ? [o/N]" # Pour plus de lisibilité, la réponse par défaut est donnée en majuscule à la suite de la question.

read -sn1 # Inutile d'entrer plus d'un caractère, ni d'appuyer sur la touche entrée.
#La variable REPLY est automatiquement créée par la fonction read du bash (builtins)
[[ $REPLY =~ [yYoO] ]] || { echo -e "${ROUGE}Abandon sauvegarde.${STNDT}\nSortie Sauvegarde"; exit; }

echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde le : $(date +%d-%m-%Y) à $(date +%T)" # Seulement si l'utilisateur a appuyé sur la touche "y" "Y" "o" ou "O"
echo -e "${ROSE}-----------\nSynchronisation en cours...\n ------------"

# à noter l'usage des ">" dans les diverses commandes avec rsync :
# + ">" renvoie le contenu du terminal dans le fichier indiqué
# en écrasant tout ce que contient déjà ce fichier.
# + ">>" renvoie le contenu du terminal sans écraser ce que contient déjà le fichier.
# + "2" + ">" renvoie seulement les messages d'erreurs générés par le processus dans
# le fichier indiqué, en écrasant le contenu de ce fichier.
# + "2>>" renvoie les erreurs sans écraser le contenu du fichier.

#SSD224Go=====
mountPnt="/media/bernard/SSD224Go"
repSauvg="${mountPnt}"
msgColor="${CYAN}"

if $(mountpoint "${mountPnt}" -q); then
    echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------"
    repPerso="/home/bernard"
    rsync -a -P --del --stats "${repPerso}/DocumentsPerso" "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesDocuments"   "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesPhotos"      "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesScripts"     "${repSauvg}"  2>> "${backup}"
else
    echo "Attention, ${mountPnt} absent"
fi

#DDSauv1To-a=====
mountPnt="/media/bernard/Sauv1To-a"
repSauvg="${mountPnt}/SauvDdPrincipal1"
msgColor="${ROSE}"

if $(mountpoint "${mountPnt}" -q); then
    if [ -d "${repSauvg}" ]; then
        echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------"
        rsync -a -P --del --stats /home "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /etc  "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /var  "${repSauvg}"  2>> "${backup}"
    else
        echo "Attention, répertoire ${repSauvg} absent"
    fi
else
    echo "Attention, ${mountPnt} absent"
fi

#DD500Go=====
mountPnt="/media/usb0"
repSauvg="${mountPnt}/SauvDdPrincipal2"
msgColor="${BLEU}"

if $(mountpoint "${mountPnt}" -q); then
    if [ -d "${repSauvg}" ]; then
        echo -e "${msgColor}-----------\nSynchronisation en cours...\n ------------"
        rsync -a -P --del --stats /home "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /etc  "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /var  "${repSauvg}"  2>> "${backup}"
    else
        echo "Attention, répertoire ${repSauvg} absent"
    fi
else
    echo "Attention, ${mountPnt} absent"
fi

#========
# Vérification des liens = faite
# Insertion de la date à la fin de la liste d'erreur si le fichier backuperror
# n'est pas vide (c'est à dire s'il y a des erreurs), ce que vérifie l'option "-s" :
if [ -s "${backup}" ]; then
    echo -e $STNDT "Sauvegarde terminée le $(date +%d-%m-%Y) à $(date +%T)"
else
    echo -e $STNDT "Procédure interrompue par l'utilisateur le $(date +%d-%m-%Y) à $(date +%T)"
fi

read -p "Pour fermer le programme de sauvegarde : Ctrl + C"

# ---- fin du script ----
Merci MicP :wink:

EDIT 1
Script modifié et fonctionnel :icon_biggrin:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5854
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Concernant les logs, je pensais surtout du point de vue utilisateur: la sauvegarde s'est bien passée, ou pas, pour chaque support.
Pour faciliter l'ajout de support, il faudrait revoir l'orga du script, afin de mettre en tete:
- un tableau avec les support
un tableau avec les fichiers a sauvegarder
un tableau qui liste qui est sauvégarder où. Sachant qu'un repertoire peut très bien étre sauvegardé sur plusieurs supports différents.
Cette configuration pourrait d'illeurs étre sortie du script et mise dans un fichier texte.
Le script devrait alors balayer les tableaux pour tester la présence des supports et rep à sauvegarder, effectuer la sauvegarde, écrire dans un fichier de log:
" date sauvegarde de X vers Y : OK (ou pas ..).
Pas compliqué techniquement, mais chronophage !
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

piratebab a écrit : 14 sept. 2017, 10:14 + 1/ Concernant les logs, je pensais surtout du point de vue utilisateur: la sauvegarde s'est bien passée, ou pas, pour chaque support.

Pour faciliter l'ajout de support, il faudrait revoir l'orga du script, afin de mettre en tete:
+ 2/ un tableau avec les support
+ 3/ un tableau avec les fichiers a sauvegarder
+ 4/ un tableau qui liste qui est sauvégarder où. Sachant qu'un repertoire peut très bien étre sauvegardé sur plusieurs supports différents.

Cette configuration pourrait d'ailleurs étre sortie du script et mise dans un fichier texte.
Le script devrait alors balayer les tableaux pour tester la présence des supports et rep à sauvegarder, effectuer la sauvegarde, écrire dans un fichier de log:
" date sauvegarde de X vers Y : OK (ou pas ..).
Pas compliqué techniquement, mais chronophage !
.
+ 1/ : lorsque la sauvegarde se passe "bien", il est juste indiqué la date et heure, comme indiqué ici

+ 2/ : serait utile, en visualisant qui est connecté ou pas... et laisserait le choix de connecter, ou pas... en cas de sushi sur un support !

+ 3/ : ce serait long et fastidieux... Après utile ou pas...

+ 4/ : c'est ce que je fais, sauvegarder sur plusieurs supports, le même répertoire, ici, et reprendre ce qui est inscrit dans le script.
+ par exemple, en reprenant "notre" script :
/DocumentsPerso sur /media/bernard/SSD224Go
mais là, je méconnais comment extraire les divers noms et les mettre en tableau...

Je vais chercher sur les diverses pages que j'ai mises en favoris, s'ils parlent de ces tableaux :wink:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5854
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Le plus simple est de mettre la configuration dans un fichier texte qui sera lu par le script au démarrage.le de fichier de conf
# définir ici les médias de sauvegarde
MEDIA
media1/media/media1
media2 /media/ssd-disk

#définir ici la liste des fichiers à sauvegarder
sauv1 /home/moi/
sauv2 /var/log


#définir ici vos sauvegardes
sauv1 media1
sauv1 media2
sauv2 media1
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour

Pour les suites de deux commandes date
tu pourrais remplacer :

Code : Tout sélectionner

le : $(date +%d-%m-%Y) à $(date +%T)

par une seule commande date :

Code : Tout sélectionner

$(date +"le : "%d-%m-%Y" à "%T)


=======
Pour les suites de lignes de commande rsync
tu pourrais remplacer :

Code : Tout sélectionner

    rsync -a -P --del --stats "${repPerso}/DocumentsPerso" "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesDocuments"   "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesPhotos"      "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesScripts"     "${repSauvg}"  2>> "${backup}"

par une seule commande rsync :

Code : Tout sélectionner

    rsync --archive --partial --progress --delete-during --stats  \
       --include="${repPerso}/DocumentsPerso"                     \
       --include="${repPerso}/MesDocuments"                       \
       --include="${repPerso}/MesPhotos"                          \
       --include="${repPerso}/MesScripts"                         \
    "${repSauvg}"  2>> "${backup}"

===
et tu pourrais aussi remplacer :

Code : Tout sélectionner

        rsync -a -P --del --stats /home "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /etc  "${repSauvg}"  2>> "${backup}"
        rsync -a -P --del --stats /var  "${repSauvg}"  2>> "${backup}"

par une seule commande rsync :

Code : Tout sélectionner

        rsync --archive --partial --progress --delete-during --stats  \
            --include="/home"                                         \
            --include="/etc"                                          \
            --include="/var"                                          \
        "${repSauvg}"  2>> "${backup}"



=======
=======
On peut aussi changer ces lignes :

Code : Tout sélectionner

BLEU="\\033[1;34m"

echo -e "${BLEU}Exécuter la sauvegarde ? [o/N]" # Pour plus de lisibilité, la réponse par défaut est donnée en majuscule à la suite de la question.

read -sn1 # Inutile d'entrer plus d'un caractère, ni d'appuyer sur la touche entrée.

par :

Code : Tout sélectionner

BLEU=$'\e[1;34m'
STNDT=$'\e[0m'
# pour remplacer les retour à la ligne ( \n ) :
NEWLN=$'\n'

read -sn1 -p "${BLEU}Exécuter la sauvegarde ? [o/N]${NEWLN}${STNDT}"


======
Si on adopte la même syntaxe pour la définition des variables d'attributs des couleurs des caractères
on peut se passer d'utiliser l'option -e de la commande echo
Par exemple :

Code : Tout sélectionner

# Variables de couleurs
VERT="\\033[1;32m"
STNDT="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"


echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde le : $(date +%d-%m-%Y) à $(date +%T)" # Seulement si l'utilisateur a appuyé sur la touche "y" "Y" "o" ou "O"
echo -e "${ROSE}-----------\nSynchronisation en cours...\n ------------"

deviendrait :

Code : Tout sélectionner

# Variables de couleurs
VERT=$'\e[1;32m'
STNDT=$'\e[0m'
ROUGE=$'\e[1;31m'
ROSE=$'\e[1;35m'
BLEU=$'\e[1;34m'
BLANC=$'\e[0;02m'
JAUNE=$'\e[1;33m'
CYAN=$'\e[1;36m'

# pour remplacer les retour à la ligne ( \n ) :
NEWLN=$'\n'

echo "${VERT}Sauvegarde lancée ! ${NEWLN}${JAUNE}----${NEWLN}Lancement sauvegarde $(date +"le : "%d-%m-%Y" à "%T)${NEWLN}${STNDT}" # Seulement si l'utilisateur a appuyé sur la touche "y" "Y" "o" ou "O"
echo "${ROSE}------------${NEWLN}Synchronisation en cours...${NEWLN}------------${NEWLN}${STNDT}"


=======
Note perso : Je préfère remettre à zéro tous les attributs de couleur des caractères à la fin de chaque affichage,
ce qui permet, de ne pas avoir de surprises quand on insère dans le script une ligne de commande echo entre deux autres.

Voir aussi : https://en.wikipedia.org/wiki/ANSI_escape_code
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

Merci MicP, je vais tester et indiquer le résultat :icon_biggrin:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

Je commence par la date et heure, tu suggères :
MicP a écrit : 20 sept. 2017, 13:09 Bonjour

Pour les suites de deux commandes date
tu pourrais remplacer :

Code : Tout sélectionner

le : $(date +%d-%m-%Y) à $(date +%T)

par une seule commande date :

Code : Tout sélectionner

$(date +"le : "%d-%m-%Y" à "%T)
...
.
voici la ligne modifiée, et il y a que cette ligne de modifiée, rien d'autre, même si le résultat renvoie à d'autres lignes :

Code : Tout sélectionner

#echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde le : $(date +%d-%m-%Y) à $(date +%T)" 

echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde $(date +"le : "%d-%m-%Y" à "%T)
.
et le résultat :

Code : Tout sélectionner

bernard-portable:/home/bernard# /home/bernard/MesScripts/Sauvegarde_portable_Sauv1T_500go_SSD224Go_2
Exécuter la sauvegarde ? [o/N]
/home/bernard/MesScripts/Sauvegarde_portable_Sauv1T_500go_SSD224Go_2: ligne 97: caractère de fin de fichier (EOF) prématuré lors de la recherche du « ' » correspondant
/home/bernard/MesScripts/Sauvegarde_portable_Sauv1T_500go_SSD224Go_2: ligne 103: erreur de syntaxe : fin de fichier prématurée
bernard-portable:/home/bernard# 
.
il doit y avoir pâté dans les " " parce que celle que tu avais proposée précédemment, et que j'avais modifiée, fonctionne parfaitement :icon_biggrin:
Non ?
Elle te déplaît... meuh nan, elle fonctionne ainsi... alors pour quelle raison la modifier :wink:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

MicP a écrit : 20 sept. 2017, 13:09 Bonjour
...
=======
Note perso : Je préfère remettre à zéro tous les attributs de couleur des caractères à la fin de chaque affichage,
ce qui permet, de ne pas avoir de surprises quand on insère dans le script une ligne de commande echo entre deux autres.

Voir aussi : https://en.wikipedia.org/wiki/ANSI_escape_code
.
je remets les attributs couleurs en standard, lorsque le script est terminé...
cependant, si une ligne de commande doit être insérée, autant qu'elle garde la couleur du support concerné, tu ne le penses pas ?
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Oui, en fait, juste un peu fatigué ces jours-ci => j'avais testé la commande date formulée avec des double guillemets,
mais pour intégrer cette commande dans une chaîne qui est encadrée par des guillemets,
il m'aurait fallut les remplacer par des guillemets simples,
comme ça :

Code : Tout sélectionner

echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde $(date +'le : '%d-%m-%Y' à '%T)"
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

MicP a écrit : 21 sept. 2017, 01:58 Oui, en fait, juste un peu fatigué ces jours-ci => j'avais testé la commande date formulée avec des double guillemets,
mais pour intégrer cette commande dans une chaîne qui est encadrée par des guillemets,
il m'aurait fallut les remplacer par des guillemets simples,
comme ça :

Code : Tout sélectionner

echo -e "${VERT}Sauvegarde lancée !\n${JAUNE}----\nLancement sauvegarde $(date +'le : '%d-%m-%Y' à '%T)"
.
Oh rassures Toi, pas grave du tout pour mi :wink:

Sinon, pour quelle raison ce changement de commande, entre :
Lancement sauvegarde $(date +'le : '%d-%m-%Y' à '%T)
et
Lancement sauvegarde le : $(date +%d-%m-%Y) à $(date +%T) ?

Une économie de lettres, ou un meilleur langage script ?
c'est juste pour que je comprenne le pourquoi de la modification :wink:

En tous les cas, Merci pour ton aide :icon_biggrin:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Sinon, pour quelle raison ce changement de commande, entre :
Lancement sauvegarde $(date +'le : '%d-%m-%Y' à '%T)
et
Lancement sauvegarde le : $(date +%d-%m-%Y) à $(date +%T) ?
Contrairement à la deuxième, dans la première, la commande date n'est lancée qu'une seule fois,
c'est toujours ça de moins à faire pour la machine.

=======
Dans ce script, on pourrait donc ne lancer
la commande rsync que 3 fois au lieu de 10
et la commande date 2 fois au lieu de 4
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

MicP a écrit : 21 sept. 2017, 11:25
Sinon, pour quelle raison ce changement de commande, entre :
Lancement sauvegarde $(date +'le : '%d-%m-%Y' à '%T)
et
Lancement sauvegarde le : $(date +%d-%m-%Y) à $(date +%T) ?
Contrairement à la deuxième, dans la première, la commande date n'est lancée qu'une seule fois,
c'est toujours ça de moins à faire pour la machine.

=======
Dans ce script, on pourrait donc ne lancer
la commande rsync que 3 fois au lieu de 10
et la commande date 2 fois au lieu de 4
.
Explications claires, nettes et précises, Merci MicP :icon_biggrin:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

MicP a écrit : 20 sept. 2017, 13:09 Bonjour
...
=======
Pour les suites de lignes de commande rsync
tu pourrais remplacer :

Code : Tout sélectionner

    rsync -a -P --del --stats "${repPerso}/DocumentsPerso" "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesDocuments"   "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesPhotos"      "${repSauvg}"  2>> "${backup}"
    rsync -a -P --del --stats "${repPerso}/MesScripts"     "${repSauvg}"  2>> "${backup}"

par une seule commande rsync :

Code : Tout sélectionner

    rsync --archive --partial --progress --delete-during --stats  \
       --include="${repPerso}/DocumentsPerso"                     \
       --include="${repPerso}/MesDocuments"                       \
       --include="${repPerso}/MesPhotos"                          \
       --include="${repPerso}/MesScripts"                         \
    "${repSauvg}"  2>> "${backup}"

===
...
.
j'ai donc remplacé dans le script, que ces lignes pour le ssd, où je préfère tester en premier, étant le plus rapide :

Code : Tout sélectionner

rsync --archive --partial --progress --delete-during --stats  \
par

Code : Tout sélectionner

rsync -a -P -del --stats  \
       --include="${repPerso}/DocumentsPerso"                     \
       --include="${repPerso}/MesDocuments"                       \
       --include="${repPerso}/MesPhotos"                          \
       --include="${repPerso}/MesScripts"                         \
    "${repSauvg}"  2>> "${backup}"
.
Cependant, après avoir lancé le script, je "vois" toujours les lignes défiler même pour la seconde, puis la troisième sauvegarde, sans que j'ai, bien entendu, ajouté ou modifié quoique ce soit...
heureusement que c'est sur le ssd, alors qu'elles ne devraient plus, puisque déjà sauvegardées au premier lancement...

ça proviendrait de quelle variable ?
Merci du retour :wink:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour
ça proviendrait de quelle variable ?
Aucune idée. Je ne vois pas défiler de "lignes".

=======
-a   <=> --archive
-P   <=> same as --partial --progress
-del <=> an alias for --delete-during

Donc : -a -P -del --stats <=> --archive --partial --progress --delete-during --stats
S'il s'agissait d'utiliser la ligne de commande, bien sûr, j'utiliserai les options courtes pour gagner du temps,
mais dans un script, quand je relis le script, je trouve plus facile à comprendre les options longues que les courtes.

=======
Je n'utilisais pas rsync et pour mes essais, il m'aurait fallu faire des tests plus rigoureux.
Mais après quelques autres tests, j'ai modifié les lignes de commande rsync du script.

Code : Tout sélectionner

    rsync --archive --partial --progress --delete-during --stats  \
       --include="DocumentsPerso/***"                             \
       --include="MesDocuments/***"                               \
       --include="MesPhotos/***"                                  \
       --include="MesScripts/***"                                 \
       --exclude="*"                                              \
    "${repPerso}/" "${repSauvg}"  2>> "${backup}"

Code : Tout sélectionner

        rsync --archive --partial --progress --delete-during --stats  \
            --include="home/***"                                      \
            --include="etc/***"                                       \
            --include="var/***"                                       \
            --exclude="*"                                             \
        / "${repSauvg}"  2>> "${backup}"
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

MicP a écrit : 22 sept. 2017, 11:24 Bonjour
ça proviendrait de quelle variable ?
Aucune idée. Je ne vois pas défiler de "lignes".
...
.
Lorsque tu lances le script dans une fenêtre de commande, cela se passe comment pour toi ?

Avec la version non modifiée, après la première sauvegarde, il y a très peu de commentaires, puisque tout a été fait lors de la précédente sauvegarde...
Je ne sais si je m'exprime correctement et de façon compréhensible... :wink:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

…puisque tout a été fait lors de la précédente sauvegarde...
Si tu as lancé la ligne de commande rsync qui sauvegarde le contenu du répertoire /var
tu aura très certainement des nouveaux fichiers qui seront à mettre à jour à chaque sauvegarde.

=======
…Lorsque tu lances le script dans une fenêtre de commande, cela se passe comment pour toi ?…

Code : Tout sélectionner

michel@debg53sw:~$ su -c 'mount /{dev,mnt}/sda1'                  # je mounte mon système de fichiers cible
Mot de passe : 
michel@debg53sw:~$ 
michel@debg53sw:~$ ls -l /home/michel/pourRsync/                  # Je liste les répertoires contenus dans la source
total 12
drwxr-xr-x  3 michel michel 4096 sept. 20 12:02 THL
drwxr-xr-x 10 michel michel 4096 sept.  8 16:40 THL3
drwxr-xr-x  2 michel michel 4096 sept. 22 10:11 neSeraPasSauvegardé
michel@debg53sw:~$ 
michel@debg53sw:~$ ls -l /mnt/sda1/home/michel/cibleRsync/         # pour ce test, je vérifie que le répertoire cible est vide
total 0
michel@debg53sw:~$                                                 # je vais lancer rsync, et le répertoire "neSeraPasSauvegardé" (qui n'est pas dans un "include") ne sera pas pris en compte
michel@debg53sw:~$ rsync --archive --partial --progress --delete-during --stats --include="THL/***" --include="THL3/***" --exclude="*" /home/michel/pourRsync/ /mnt/sda1/home/michel/cibleRsync/

sending incremental file list
./
THL/
THL/Document 1 sans titre
            315 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=380/384)
THL/init
        220,816 100%  105.29MB/s    0:00:00 (xfr#2, to-chk=379/384)
THL/init.aee.customer.rc
            419 100%  204.59kB/s    0:00:00 (xfr#3, to-chk=378/384)
THL/init.charging.rc
         23,649 100%   11.28MB/s    0:00:00 (xfr#4, to-chk=377/384)
THL/init.environ.rc
          1,123 100%  548.34kB/s    0:00:00 (xfr#5, to-chk=376/384)
THL/init.modem.rc
          3,208 100%    1.02MB/s    0:00:00 (xfr#6, to-chk=375/384)
THL/init.no_ssd.rc

# …
#     Il y a tout plein d'autres lignes
# …

THL3/logs/recovery/20140101_001253.log
          6,972 100%   14.93kB/s    0:00:00 (xfr#321, to-chk=1/384)
THL3/logs/recovery/20140101_001314.log
          7,099 100%   15.20kB/s    0:00:00 (xfr#322, to-chk=0/384)

Number of files: 384 (reg: 322, dir: 62)
Number of created files: 383 (reg: 322, dir: 61)
Number of deleted files: 0
Number of regular files transferred: 322
Total file size: 430,615,856 bytes
Total transferred file size: 430,615,856 bytes
Literal data: 430,615,856 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 430,743,309
Total bytes received: 6,464

sent 430,743,309 bytes  received 6,464 bytes  172,299,909.20 bytes/sec
total size is 430,615,856  speedup is 1.00
michel@debg53sw:~$ 

Code : Tout sélectionner

michel@debg53sw:~$ ls -l /mnt/sda1/home/michel/cibleRsync/         # je liste le contenu du répertoire cible dans lequel une sauvegarde a déjà été faite
total 8
drwxr-xr-x  3 michel michel 4096 sept. 20 12:02 THL
drwxr-xr-x 10 michel michel 4096 sept.  8 16:40 THL3
michel@debg53sw:~$                                                 # je vais lancer rsync alors qu'aucun des fichiers source n'a été modifié
michel@debg53sw:~$ rsync --archive --partial --progress --delete-during --stats --include="THL/***" --include="THL3/***" --exclude="*" /home/michel/pourRsync/ /mnt/sda1/home/michel/cibleRsync/
sending incremental file list

Number of files: 384 (reg: 322, dir: 62)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 0
Total file size: 430,615,856 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 9,405
Total bytes received: 80

sent 9,405 bytes  received 80 bytes  18,970.00 bytes/sec
total size is 430,615,856  speedup is 45,399.67
michel@debg53sw:~$ 
Avatar de l’utilisateur
DbFr871
Membre très actif
Membre très actif
Messages : 1140
Inscription : 17 mai 2016, 20:48
Localisation : Nègrepelissien
Contact :
Status : Hors-ligne

MicP a écrit : 22 sept. 2017, 12:39
…puisque tout a été fait lors de la précédente sauvegarde...
Si tu as lancé la ligne de commande rsync qui sauvegarde le contenu du répertoire /var
tu aura très certainement des nouveaux fichiers qui seront à mettre à jour à chaque sauvegarde.
...
.
Pas du tout, j'ai inséré la modification que pour le ssd, qui a peu de dossiers, donc rapide à voir et à "suivre" les lignes qui s'inscrivent... :wink:

MicP a écrit : 22 sept. 2017, 12:39...
=======
…Lorsque tu lances le script dans une fenêtre de commande, cela se passe comment pour toi ?…

Code : Tout sélectionner

michel@debg53sw:~$ su -c 'mount /{dev,mnt}/sda1'                  # je mounte mon système de fichiers cible
Mot de passe : 
michel@debg53sw:~$ 
michel@debg53sw:~$ ls -l /home/michel/pourRsync/                  # Je liste les répertoires contenus dans la source
total 12
drwxr-xr-x  3 michel michel 4096 sept. 20 12:02 THL
drwxr-xr-x 10 michel michel 4096 sept.  8 16:40 THL3
drwxr-xr-x  2 michel michel 4096 sept. 22 10:11 neSeraPasSauvegardé
michel@debg53sw:~$ 
michel@debg53sw:~$ ls -l /mnt/sda1/home/michel/cibleRsync/         # pour ce test, je vérifie que le répertoire cible est vide
total 0
michel@debg53sw:~$                                                 # je vais lancer rsync, et le répertoire "neSeraPasSauvegardé" (qui n'est pas dans un "include") ne sera pas pris en compte
michel@debg53sw:~$ rsync --archive --partial --progress --delete-during --stats --include="THL/***" --include="THL3/***" --exclude="*" /home/michel/pourRsync/ /mnt/sda1/home/michel/cibleRsync/

sending incremental file list
./
THL/
THL/Document 1 sans titre
            315 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=380/384)
THL/init
        220,816 100%  105.29MB/s    0:00:00 (xfr#2, to-chk=379/384)
THL/init.aee.customer.rc
            419 100%  204.59kB/s    0:00:00 (xfr#3, to-chk=378/384)
THL/init.charging.rc
         23,649 100%   11.28MB/s    0:00:00 (xfr#4, to-chk=377/384)
THL/init.environ.rc
          1,123 100%  548.34kB/s    0:00:00 (xfr#5, to-chk=376/384)
THL/init.modem.rc
          3,208 100%    1.02MB/s    0:00:00 (xfr#6, to-chk=375/384)
THL/init.no_ssd.rc

# …
#     Il y a tout plein d'autres lignes
# …

THL3/logs/recovery/20140101_001253.log
          6,972 100%   14.93kB/s    0:00:00 (xfr#321, to-chk=1/384)
THL3/logs/recovery/20140101_001314.log
          7,099 100%   15.20kB/s    0:00:00 (xfr#322, to-chk=0/384)

Number of files: 384 (reg: 322, dir: 62)
Number of created files: 383 (reg: 322, dir: 61)
Number of deleted files: 0
Number of regular files transferred: 322
Total file size: 430,615,856 bytes
Total transferred file size: 430,615,856 bytes
Literal data: 430,615,856 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 430,743,309
Total bytes received: 6,464

sent 430,743,309 bytes  received 6,464 bytes  172,299,909.20 bytes/sec
total size is 430,615,856  speedup is 1.00
michel@debg53sw:~$ 
...
.
et si tu recommences le lancement du script, il y aura pratiquement plus rien en lignes :wink:

c'est de cela, que je veux signaler :wink:
Cordialement,
Bernard
Debian9.1Stretch-XFCE-64bits-Sony-Vaio,Intel-P8400-2.26GHz,DD-SeagateSSHD500Go,GeForce9300M-GS-256Mo
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

…et si tu recommences le lancement du script, il y aura pratiquement plus rien en ligne …
C'est effectivement ce que l'on peut constater dans le deuxième bloc CODE de mon précédent message
dont j'ai transmis l'intégralité du retour de commande rsync
Répondre