Contenu | Rechercher | Menus

Annonce

Les adresses laposte.net ne permettent pas de recevoir nos emails. Vous êtes invité à changer d'adresse dans vos paramètres de compte à votre prochaine connexion.

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#301 Le 05/03/2009, à 13:48

m2nis

Re : [HowTo] Sauvegarder son "home" avec rsync

Effectivement, c'est sûrement la solution la plus simple. Le fichier conserve à priori un avantage supplémentaire (dans le cas de Samba notamment), c'est qu'il permet de vérifier que le répertoire n'est pas vide ET est le bon. On est hélas pas à l'abri d'une erreur hors script...


Michaël.

Hors ligne

#302 Le 05/03/2009, à 15:20

soupaloignon

Re : [HowTo] Sauvegarder son "home" avec rsync

m2nis a écrit :

Pour l'instant, le moyen que je vois pour parer au problème est d'avoir, à la racine de la source à synchroniser, un fichier au nom unique dont la présence pourrait être vérifiée avant de lancer le rsync. En cas de disque défectueux, le fichier serait donc aussi inaccessible que le reste de l'arborescence et la catastrophe pourrait être évitée. Mais si vous avez d'autres idées, je suis preneur. smile

Ca me parait ce qu'il y a de plus simple et d'efficace. En tout cas merci pour ce retour de (malheureuse) expérience


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#303 Le 27/10/2009, à 09:07

jrev

Re : [HowTo] Sauvegarder son "home" avec rsync

Bonjour,

J'utilise la ligne

rsync -av --del --stats $SOURCE_DIRS "$TARGET_DIR"

pour sauvegarder mes documents sur une clé USB

Je l'utilise aussi pour sauvegarder ces mêmes documents sur le PC d'à coté via un partage de dossiers NFS

sur NFS le script ne copie que les nouveaux dossiers et efface les dossiers supprimés de la sources et cela prend une ou deux secondes à vérifier s'il n'y a pas de changement, mais la sauvegarde sur clé USB passe systématiquement les dossiers un par un et cela prend un temps considérable.

Je ne vois pas comment expliquer la différence de traitement.
Et vous ?


Mal nommer les choses, c'est ajouter au malheur du monde

Hors ligne

#304 Le 27/10/2009, à 09:10

mixout

Re : [HowTo] Sauvegarder son "home" avec rsync

.. peut-etre une piste

ta clé USB est en Fat32 ?

Hors ligne

#305 Le 27/10/2009, à 13:00

jrev

Re : [HowTo] Sauvegarder son "home" avec rsync

Oui elle  est en FAT32 smile
Suffirait-il de la mettre dans le même type de fichier que les partitions Ubuntu ?

Je vais essayer. Quelle est la commande pour formater  en reiserfs ?

mkreiserfs -f ?

Dernière modification par jrev (Le 27/10/2009, à 13:11)


Mal nommer les choses, c'est ajouter au malheur du monde

Hors ligne

#306 Le 27/10/2009, à 13:23

mixout

Re : [HowTo] Sauvegarder son "home" avec rsync

Pas sur ... mais si j'en crois ta commande tu demandes plein de choses à rsync qu'il est incapable de faire avec le systeme de  fichiers Fat32

un spécialiste de rsync t'en dira sans doute plus mais j'ai la meme lenteur avec les disques USB.

[EDIT] ah ! si tu rajoutes des éléments à tes posts, mes réponses ne veulent plus rien dire ....

Dernière modification par mixout (Le 27/10/2009, à 13:56)

Hors ligne

#307 Le 27/10/2009, à 13:53

poupoul2

Re : [HowTo] Sauvegarder son "home" avec rsync

jrev a écrit :

Oui elle  est en FAT32 smile
Suffirait-il de la mettre dans le même type de fichier que les partitions Ubuntu ?

Il est vraisemblable que cela résoudrait ton problème (Cf. la doc)
L'utilisation de systèmes de fichiers différents avec rsync n'est pas conseillée, pour cause de pertes potentielles de droits et attributs de fichiers et dossiers (ex. fat32).

Hors ligne

#308 Le 28/10/2009, à 14:52

jrev

Re : [HowTo] Sauvegarder son "home" avec rsync

Je ne peux formater ma clé USB en ext3 .

J'enfiche ma clé qui se monte et s'ouvre automatiquement puis je trouve son nom par fdisk -l
je passe ensuite  la commande de démontage :

jean@jean:~$ umount /dev/sdf
umount: /dev/sdf n'est pas monté (selon mtab)
jean@jean:~$ mke2fs -j /dev/sda
mke2fs 1.41.4 (27-Jan-2009)
/dev/sda est le périphérique en intégralité, pas seulement une partition !
Procéder malgré tout ? (o,n) o
mke2fs: Permission non accordée lors de la tentative de détermination de la taille du système de fichiers
jean@jean:~$

Où trouver la solution ?
smile

Dernière modification par jrev (Le 28/10/2009, à 20:24)


Mal nommer les choses, c'est ajouter au malheur du monde

Hors ligne

#309 Le 29/10/2009, à 08:43

jrev

Re : [HowTo] Sauvegarder son "home" avec rsync

La solution est dans Karmic Koala ...

Pour la première fois le menu formater a été ajouté au menu du clic droit sur l'icône de la clé sur le Bureau !

Tout arrive à qui sait attendre :

http://ubuntuforums.org/showthread.php?t=1303504    au post #10

Dernière modification par jrev (Le 29/10/2009, à 08:46)


Mal nommer les choses, c'est ajouter au malheur du monde

Hors ligne

#310 Le 29/10/2009, à 09:00

soupaloignon

Re : [HowTo] Sauvegarder son "home" avec rsync

sinon tu peux utiliser gparted et démonter puis formater ta clé directement à partir du logiciel. Et même la renommer, pratique pour tester sa présence de manière sure avant un rsync


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#311 Le 29/10/2009, à 09:05

jrev

Re : [HowTo] Sauvegarder son "home" avec rsync

Merci soupaloignon !
J'ai aussi trouvé sur le forum anglais la formule magique en attendant Karmic Koala :

sudo mkfs -t ext3 /dev/sdx

le sdx à préciser par la commande

sudo fdisk -l

Je peux maintenant utiliser cette clé en ext3 pour sauvegarder mes données et ne rajouter que les nouveaux fichiers dans la sauvegarde.
Bonne journée à tous smile

Dernière modification par jrev (Le 29/10/2009, à 09:57)


Mal nommer les choses, c'est ajouter au malheur du monde

Hors ligne

#312 Le 29/10/2009, à 17:52

caspual

Re : [HowTo] Sauvegarder son "home" avec rsync

Salut à tous

Je voudrais faire une sauvegarde à distance par rsync et ssh, rsync et ssh fonctionne déja.
Comme les données font +60 Go, j'ai tout d'abord fait une copie par DD amovible, en reiserfs sur tous les supports (que du Linux donc).
Une fois à la maison, j'ai fais des essais de sauvegarde rsync, seule différence devrait être copié, mais rsync me fait systématiquement une sauvegarde complète, même un fichier datant de 2005 est copié, je le stoppe à chaque fois et fait d'autres essais, sans succés. Voici ma ligne de commande :

rsync -e 'ssh' -rltzvu --size-only --force --progress --ignore-errors --delete --partial caspual@ip_du_serveur::dossier /home/caspual/sauvegarde

En principe, avec size-only, il ne devrait pas copier les anciens fichiers, où est mon erreur ?

@+

Hors ligne

#313 Le 29/10/2009, à 17:56

jrev

Re : [HowTo] Sauvegarder son "home" avec rsync

Pourquoi n'utilises-tu pas la ligne

rsync -av --del --stats $SOURCE_DIRS "$TARGET_DIR"

Ça paraît bien compliqué ta ligne de synchronisation big_smile
Tu pourrais peut-être la simplifier hmm

Dernière modification par jrev (Le 29/10/2009, à 17:58)


Mal nommer les choses, c'est ajouter au malheur du monde

Hors ligne

#314 Le 29/10/2009, à 18:01

caspual

Re : [HowTo] Sauvegarder son "home" avec rsync

Salut

Au début je n'avais que :
rsync -avz --del source destination

C'est pour résoudre mon pbme que j'ai créé cette ligne, je la simplifierai à nouveau dés que ça marche.

@+

Hors ligne

#315 Le 03/02/2010, à 10:17

Totor

Re : [HowTo] Sauvegarder son "home" avec rsync

koderez a écrit :

[...]

#!/bin/bash

afficheTaille () {
  taille=$(sed '/\./! s/^.*$/&.00/' <<< $1)
  i=1
  while [[ ${#taille} -ge 7 ]]; do
    taille=$(bc <<< "scale=2;$taille/1024")
    ((i+=1))
  done

  case $i in
    1) taille+=" octets" ;;
    2) taille+=" Ko" ;;
    3) taille+=" Mo" ;;
    4) taille+=" Go" ;;
  esac

  echo $taille
}

CHOIX=`zenity --list --radiolist --width=300 --height=250 --title="svgrd" --text="Choix du périphérique de sauvegarde" --hide-column=2 \
  --column "" --column "" --column "Périphériques" \
  TRUE        1           "Disque interne" \
  FALSE       2           "Disque Externe"`

if [ "$?" = 1 ]; then
  zenity --info --title="svgrd" --text="Opération annulée."
  exit
fi

case $CHOIX in
  1) UUID=bcd7940f-f0ca-44a1-bb21-c2b060f68fac
     MOUNT=/media/svgrd
     ;;
  2) UUID=9db17bd1-d105-4e6a-b5c9-d0a68f69f8eb
     MOUNT=/media/svgrd_extern
     ;;
esac

SRC=$HOME
DEST=$MOUNT/$USER
RSYNC_ERR=/tmp/rsync.err

if [[ ! -e /dev/disk/by-uuid/$UUID ]]; then
  zenity --error --title="svgrd" --text="Périphérique de sauvegarde absent."
else
  MOUNT_ERR=$(mount $MOUNT 2>&1)
  MOUNT_ES=$?
  if [[ ( $MOUNT_ES -ne 0 ) && ( $MOUNT_ES -ne 32 ) ]]; then # 32=déjà montée
    zenity --error --title="svgrd" --text="Problème lors du   montage du périphérique de\nsauvegarde \"$MOUNT\".\n\n<span color='red'><b>mount erreur n° $MOUNT_ES</b>.\n$MOUNT_ERR</span>"
  else
    echo "0" > nb
    DEBUT=$(date +%s)

    rsync -av --delete --ignore-errors --force --progress \
    --filter "- .aMule/Incoming/" \
    --filter "- .cache/" \
    --filter "- .thumbnails/" \
    --filter "- lost+found/" \
    --filter "- Musique/" \
    --filter "- Vidéos/" \
    --filter "- *~" \
    --filter "- *.avi" --filter "- *.AVI" \
    --filter "- *.log" --filter "- *.LOG" \
    --filter "- *.mp3" --filter "- *.MP3" \
    --filter "- *.vdi" --filter "- *.VDI" \
    --filter "- *.wma" --filter "- *.WMA" \
    $SRC/ $DEST/ 2>>$RSYNC_ERR | sed '
    /to-check=/! {
      /^sending/  {d;q;}
      /\/$/       {d;q;}
      /^sent/     {s/^.*$/echo "&" \>\/tmp\/rapport\.txt/e;d;q;};
      /^total/    {s/^.*$/echo "&" \>\>\/tmp\/rapport\.txt/e;d;q;};
      /^.\{43\}/  {s/\(^.\{20\}\).*\(.\{20\}$\)/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "\1\[...\]\2" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
      /^.\{43\}/! {s/^.*$/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "&" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
    }
    /to-check=/ {
      s/.*=\(.*\)\/\(.*\))/echo "#`echo "scale=2;\(\2-\1\)\*100\/\2" | bc | cut -d\. -f1`% (\$\(\(\2 - \1\)\) fichiers sur \2\) > \$\(cat \/tmp\/svgrd_sed\.txt\)"\; echo "scale=2;\(\2-\1\)\*100\/\2" | bc/e
    }
    ' | zenity --progress --width=580 --title="svgrd - synchronisation" --text="Initialisation de la sauvegarde..." --percentage=0 --auto-close &

    while true; do
      sleep 1
      if [ -z "$(pidof zenity)" ]; then
        pkill rsync
        break
      fi
    done

    FIN=$(date +%s)
    TEMPS=$(($FIN-$DEBUT))
    TP_HEU=$(sed 's/^.$/0&/' <<< $(($TEMPS/3600)))
    TP_TMP=$(($TEMPS%3600))
    TP_MIN=$(sed 's/^.$/0&/' <<< $(($TP_TMP/60)))
    TP_SEC=$(sed 's/^.$/0&/' <<< $(($TP_TMP%60)))
    TP=$(echo "$TP_HEU:$TP_MIN:$TP_SEC")

    ERR=$(cat $RSYNC_ERR)
    if [[ ${#ERR} -ne 0 ]]; then
      zenity --error --title="svgrd" --text="Problème lors de la sauvegarde du répertoire <b>$SRC</b>.\n\n<b><span color='red'>$ERR</span></b>."
      rm $RSYNC_ERR
    else
      NB_FICH=$(cat nb)
      ENVOI=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f2))
      RECU=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f6))
      VITESS=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f9))
      zenity --info --title="svgrd" --text="Sauvegarde du répertoire\n<b>$SRC</b>\nefféctuée avec succès.\n$NB_FICH fichiers synchronisés\n\nEnvoyé:\t$ENVOI\nReçu:\t$RECU\nTemps:\t$TP\nTransfert:\t$VITESS/sec"
      rm nb
    fi

    UMOUNT_ERR=$(umount $MOUNT 2>&1)
    UMOUNT_ES=$?
    if [[ $UMOUNT_ES -ne 0 ]]; then
      zenity --error --title="svgrd" --text="Problème lors du démontage du périphérique de\nsauvegarde \"$MOUNT\".\n\n<span color='red'><b>umount erreur n° $UMOUNT_ES</b>.\n$UMOUNT_ERR</span>"
    fi

  fi
fi

[...]
Et soyez indulgent je suis débutant smile

cf .ici


-- Lucid Lynx --

Hors ligne

#316 Le 21/07/2010, à 22:19

ewfzapp

Re : [HowTo] Sauvegarder son "home" avec rsync

merci a tous pour toutes ces infos


www.indigenecreations.fr

Hors ligne

#317 Le 14/04/2011, à 19:33

soupaloignon

Re : [HowTo] Sauvegarder son "home" avec rsync

Salut la dedans wink

Je viens de voir cette info. Elle date un peu, je ne sais pas si c'est toujours d'actualité, mais bon, ça à l'air intéressant.


Salut djibril, je me suis récemment retrouvé a peu près dans le même cas que toi
J'ai constaté que les blocages ou arrêts des transferts étaient principalement du a des coupures réseaux (local et/ou Internet car mes sauvegardes se font sur un autre serveur a travers le web)
Tout ce qui avait déjà été transféré était perdu (plusieurs centaines de Mo voir quelques Go pour les gros fichiers)
Après quelques recherches dans le man de rsync, j'ai trouvé l'option --partial, qui permet de reprendre le téléchargement ou il s'était arrêté avant la coupure.
rsync -zva --partial --delete --stats --progress
Cela n'évite donc pas les blocages ou arrêts mais permet au moins de reprendre le transfert ou il s'était arrêté
PS: il faut bien préciser le --partial avant le --delete sinon le/les fichiers temp déjà téléchargés seront effacés

Le fil est ici : http://www.developpez.net/forums/d51583 … epertoire/


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#318 Le 07/06/2011, à 22:07

Bruno666

Re : [HowTo] Sauvegarder son "home" avec rsync

Salut à tous, j'ai une petite question :

j'ai un serveur avec ubuntu 10.04 et rsync qui copie des fichiers en local dans un repertoire backup et ce repertoire est ensuite synchronisé avec toujours rsync vers un disque dur distant (à 200 kms)

les synchro fonctionnent très bien mais le souci c'est que lorsque l'on regarde les fichiers dans le disque dur ils ne sont pas tous accessible en lecture car les fichiers ont l'air de garder les droits des utilisateur de linux.

Donc sur mon poste de travail en windows, j'ai un problème de lecture de certains fichiers et impossible des les ouvrir ou de les copier.... donc en cas de restauration sur un nouveau serveur c'est un peu compliqué .....

Avez vous une idée ?

Bonne soirée à tous

Hors ligne

#319 Le 07/06/2011, à 22:44

FUN

Re : [HowTo] Sauvegarder son "home" avec rsync

Salut

Et ta commande rsync ressemble à quoi ?

Il y a un truc sur la conservation des droits dans le man, du côté des options :
-p, --perms                 préserve les permissions
-o, --owner                 préserve le propriétaire (root uniquement)
-g, --group                 préserve le groupe

http://man.developpez.com/man1/rsync.1.php/#L12


FUN

Hors ligne

#320 Le 08/06/2011, à 10:57

Bruno666

Re : [HowTo] Sauvegarder son "home" avec rsync

la commande est la suivante :
rsync --archive --verbose --compress --links --force --ignore-errors --delete --delete-excluded --backup --exclude-from=le_fichier_des_exclus --backup-dir=Destination_des_fichiers/date_du_jour  La_cible La_destination/La_date

j'avais vu ces commutateurs pour les droits, mais l'idée est bien de supprimer les droits (voir de mettre un bon vieux 777 à tous les répertoires et les fichiers)

Hors ligne

#321 Le 08/06/2011, à 11:55

yohann

Re : [HowTo] Sauvegarder son "home" avec rsync

ben le souci vient de --archive qui est fait correspond -p -o -g (+ peut être quelques autre option a vérifier dans le man)

par contre la restoration est sensée être facilitée par cette option puisqu'il suffit de tout recopier pour retrouvé une arborescence identique y compris au niveau des droits


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#322 Le 14/06/2011, à 15:25

jrev

Re : [HowTo] Sauvegarder son "home" avec rsync

Bonjour à tous,
est-il possible de faire tourner rsync sur Windows ou y a-t-il un équivalent pour synchroniser la sauvegarde de nos Documents ?


Mal nommer les choses, c'est ajouter au malheur du monde

Hors ligne

#323 Le 23/09/2016, à 11:08

kholo

Re : [HowTo] Sauvegarder son "home" avec rsync

Bonjour à tous,
je déterre le topic pour ajouter un script qui donne le choix des dossiers de départ et destination,
enregistre l'état dans un fichier ini, donne la possibilité de sauvegarder un état (mettre .sync à la fin des fichiers)
et donne le choix entre les trois méthodes données par la doc.
méthode complète pour créer un fichier en terminal :

mkdir $HOME/bin
cd $HOME/bin
touch sauvegarde
chmod +x sauvegarde
nano sauvegarde

et collez le texte suivant
NB dans nano : ctrl +x puis o puis entrée pour quitter en enregistrant

#!/bin/bash
# ----------------------------------------------
# by kholo - www.kholo-informatique.fr
# ----------------------------------------------
nomlogiciel="$(basename "$0")"
FONCTION="https://doc.ubuntu-fr.org/tutoriel/sauvegarder_home_avec_rsync
---------------------------------------------------------------------
Ce module crée une liste de choix pour faire des synchronisation de dossiers
selon trois méthodes
<b>1. Proposition soupaloignon
rsync -rltgoDv --del --ignore-errors --force SOURCE DEST</b>
rsync : appelle le programme rsync
-r : parcours le dossier indiqué et tous ses sous-dossiers
-l : copie les liens symboliques comme liens symboliques
-t : préserve les dates
-g : préserve le groupe
-o : mettre le propriétaire du fichier de destination identique à celui du fichier source
-D : préserve les périphériques
-v : plus loquace
--del : permet de supprimer les fichiers sur destination qui n'existent plus sur source
--ignore-errors : efface même s'il y a eu des erreurs E/S
--force : force la suppression de répertoires même non-vides
<b>2. Proposition Sorbus
rsync -av --del --stats SOURCE DEST</b>
-a : équivalent à -rlptgoD. C'est un moyen rapide de dire que vous voulez la récursion et de préserver pratiquement tout
Par rapport aux options choisies par soupaloignon, la proposition de Sorbus ajoute les options :
-p : provoque la mise à jour des permissions sur la destination pour qu'elles soient identiques aux permissions sur la source.
--stats : affiche quelques statistiques de transfert de fichiers, ce qui permet de vérifier l'efficacité de la sauvegarde.
Mais les options --ignore-errors et --force ne sont pas utilisées. 
<b>3. Proposition poupoul2
rsync -a --stats --progress --delete SOURCE DEST</b>
 Proposition similaire à celle de Sorbus, avec cependant deux différences par rapport aux propositions de Sorbus et de soupaloignon :
le choix de l'option --progress plutôt que de l'option -v
le choix de l'option --delete plutôt que de l'option --del
--progress : montre l'avancement pendant le transfert.
--delete : efface avant le transfert les fichiers qui n'existent pas sur la source.
--del : efface au cours du transfert (pas avant) les fichiers qui n'existent pas sur la source."
VERSION="0.04"
# NOTES DE VERSIONS
# ----------------------------------------------
# à mettre au début d'un fichier bash
#PID=$$
#FIFO=/tmp/FIFO${PID}
#mkfifo ${FIFO}
# ----------------------------------------------
echo "lancement $nomlogiciel..." ;
# "*******************initialisation*******************"
A_SAUVER=0
SCRIPT_PATH="$(pwd)" ;
FICHIER_LOG="$SCRIPT_PATH/$nomlogiciel.log" ;
FICHIER_INI="$SCRIPT_PATH/$nomlogiciel.ini" ;
FICHIER_SYNC="$FICHIER_INI"
DIR_SOURCE="$HOME" ;
DIR_DEST="/media" ;
OPTIONS="" ;

if [ ! -f "$FICHIER_LOG" ] ; then 
	touch "$FICHIER_LOG" ; 
else
	printf '%s' "" | tee "$FICHIER_LOG" ;
fi

function VoirInfos {
	# zenity --info --text="$FONCTION"
	zenity --info --no-wrap --text="$FONCTION"
}
function VoirUtilisation {
	zenity --info --no-wrap --text="Manuel utilisateur
Ce script est basé sur unity et les bases bash.
Chaque ligne conduit vers une fonction... ou rien (lignes de commentaires ou de mise en page).
L'idée est la gestion d'un fichier ini et de fichiers texte de configuration.
Les paramètres sont enregistrés dans le fichier ini en fin de session et propose l'enregistrement d'un fichier pour y enregistrer ses préférences.
Il est possible d'ouvrir une précédente sauvegarde et d'en créer de nouvelles.

Rsync :
Ici ce principe est utilisé pour appliquer au choix une ou plusieurs méthodes de sauvegarde à un dossier source vers un dossier destination.
les trois choix sont représentés dans trois fonctions SOLUTION00X.
Les détails de chaque choix sont expliquées dans les explications."
}

function Journal {
	# echo "$@" | tee -a "$FICHIER_LOG" ;
	printf '%s' "$@
" | tee -a "$FICHIER_LOG" ;
}

Journal "====================================
$(date)
ouverture du Journal" ;

# GESTION DES FICHIERS INI
# *********************************************

Journal "Chargement..." "charger Initialisation"
function Ini_File {
	if [ -f "$FICHIER_INI" ] ;
	then
		ChargerIni ;
	else
		touch "$FICHIER_INI" ;
		SauverIni ;
	fi 
}

Journal "Chargement..." "ChargerIni"
function ChargerIni {
	while read line ;
	do
		ParserLigneIni "$line" ;
	done < "$FICHIER_INI" ;
}

Journal "Chargement..." "SauverIni"
function SauverIni {
printf '%s' "FICHIER_SYNC=$FICHIER_SYNC
DIR_SOURCE=$DIR_SOURCE
DIR_DEST=$DIR_DEST
OPTIONS=$OPTIONS
" | tee "$FICHIER_INI" ;
}

Journal "Chargement..." "ParserLigneIni"
function ParserLigneIni {
	i=$@ ;
	case $i in
		# xxxxx=*)					xxxxxx="${i#*=}" ;;
		FICHIER_SYNC=*)				FICHIER_SYNC="${i#*=}" ;;
		DIR_SOURCE=*)				DIR_SOURCE="${i#*=}" ;;
		DIR_DEST=*)					DIR_DEST="${i#*=}" ;;
		OPTIONS=*)					OPTIONS="${i#*=}" ;;
	esac
}

Journal "Chargement..." "ChoisirIni"
function ChoisirIni {
FILE="$(zenity --file-selection --title='Selectionnez un fichier' \
--file-filter="Sync files (ini,sync) | *.ini *.sync") --text=$FICHIER_INI"
case $? in
	0) FICHIER_INI="$FILE" ;
		ChargerIni ;;
	1) zenity --question \
			 --title="choix" \
			 --text="Aucun fichier sélectionné, recommencer ?" \
			 && ChoisirIni ;;
			 # && ChoisirIni || exit;;
	-1) echo "An unexpected error has occurred."; exit;;
esac
# zenity --info --text="$FICHIER_INI" ;
}
Journal "lancement..." "Ini_File principal"
Ini_File ;

# FIN GESTION DES FICHIERS INI
# *********************************************
# GESTION DES FICHIERS SYNC
# *********************************************

Journal "Chargement..." "charger sync"
function Sync_File {
	if [ -f "$FICHIER_SYNC" ] ;
	then
		chargerSync ;
	else
		touch "$FICHIER_SYNC" ;
		SauverSync ;
	fi 
}

Journal "Chargement..." "chargerSync"
function ChargerSync {
	while read line ;
	do
		ParserLigneSync "$line" ;
	done < "$FICHIER_SYNC" ;
}

Journal "Chargement..." "SauverSync"
function SauverSync {
FILE="$(zenity --file-selection --save --confirm-overwrite --title='SAUVER : Selectionnez un fichier' \
--filename="$FICHIER_SYNC" --file-filter="Sync files (sync) | *.sync")"
case $? in
	0) FICHIER_SYNC="$FILE" ;
		A_SAUVER=0
		SaveSync ;;
		# ChargerSync ;;
	1) VALEUR_INUTILE="rien" ;;
	# zenity --question \
			 # --title="choix" \
			 # --text="Aucun fichier sélectionné, recommencer ?" \
			 # && SauverSync ;;
			 # && ChoisirSync || exit;;
	-1) echo "An unexpected error has occurred."; exit ;;
esac
}

function SaveSync {
	printf '%s' "FICHIER_SYNC=$FICHIER_SYNC
	DIR_SOURCE=$DIR_SOURCE
	DIR_DEST=$DIR_DEST
	OPTIONS=$OPTIONS
	" | tee "$FICHIER_SYNC" ;
}

Journal "Chargement..." "ParserLigneSync"
function ParserLigneSync {
	i=$@ ;
	case $i in
		# xxxxx=*)					xxxxxx="${i#*=}" ;;
		# FICHIER_SYNC=*)				FICHIER_SYNC="${i#*=}" ;;
		DIR_SOURCE=*)				DIR_SOURCE="${i#*=}" ;;
		DIR_DEST=*)					DIR_DEST="${i#*=}" ;;
		OPTIONS=*)					OPTIONS="${i#*=}" ;;
	esac
}

Journal "Chargement..." "ChoisirSync"
function ChoisirSync {
FILE="$(zenity --file-selection --title="OUVRIR : Selectionnez un fichier" --text="$FICHIER_SYNC" \
--filename="$FICHIER_SYNC" --file-filter="Sync files (sync) | *.sync")"
case $? in
	0) FICHIER_SYNC="$FILE" ;
		A_SAUVER=1
		ChargerSync ;;
	1) zenity --question \
			 --title="choix" \
			 --text="Aucun fichier sélectionné, recommencer ?" \
			 && ChoisirSync ;;
			 # && ChoisirSync || exit;;
	-1) echo "An unexpected error has occurred."; exit;;
esac
# zenity --info --text="$FICHIER_SYNC" ;
}

# FIN GESTION DES FICHIERS SYNC
# *********************************************

Journal "Chargement..." "_quitter"
function _quitter {
	# mettre ici tout ce qui sera nescessaire à la bonne fermeture
	if [ "$A_SAUVER -eq 1" ] ; then
		SauverSync ;
	else
		zenity --info --text="rien à sauver"
	fi
	SauverIni ;
	exit 0
}

Journal "Chargement..." "SetDIR_SOURCE"
function SetDIR_SOURCE {
# Choisir le dossier DIR_SOURCE
tmpDIR_SOURCE=$(zenity --file-selection \
--filename="${DIR_SOURCE}" \
--title="Veuillez selectionner un dossier" \
--text="Choissisez un dossier source
Annulez pour conserver 
${DIR_SOURCE}" \
--directory);
if [ $? = 0 ] ; then
	# "Détecter la présence du volume de destination et interrompre l'opération si nécessaire"
	if [ ! -e "$tmpDIR_SOURCE" ] ; then
		Journal "Attention, je ne trouve pas la source demandée" ;
		# exit 100 ;
	else
		A_SAUVER=1
		DIR_SOURCE="${tmpDIR_SOURCE}" ;
	fi
# else
	# _quitter ;
fi
}

Journal "Chargement..." "SetDIR_DEST"
function SetDIR_DEST {
# Choisir le dossier DIR_DEST
tmpDIR_DEST=$(zenity --file-selection \
--filename="${DIR_DEST}" \
--title="Veuillez selectionner un dossier" \
--text="Choissisez un dossier de destination
Annulez pour conserver 
${DIR_DEST}" \
--directory);
if [ $? = 0 ] ; then
	# "Détecter la présence du volume de destination et interrompre l'opération si nécessaire"
	if [ ! -e "$tmpDIR_DEST" ] ; then
		Journal "Attention, le disque de sauvegarde n'est pas présent" ;
		# exit 101 ;
	else
		A_SAUVER=1
		DIR_DEST="${tmpDIR_DEST}" ;
	fi
# else
	# _quitter ;
fi
}

Journal "Chargement..." "SOLUTION001"
function SOLUTION001 {
	zenity --info --no-wrap --text="Proposition soupaloignon
	rsync : appelle le programme rsync
	-r : parcours le dossier indiqué et tous ses sous-dossiers
	-l : copie les liens symboliques comme liens symboliques
	-t : préserve les dates
	-g : préserve le groupe
	-o : mettre le propriétaire du fichier de destination identique à celui du fichier source
	-D : préserve les périphériques
	-v : plus loquace
	--del : permet de supprimer les fichiers sur destination qui n'existent plus sur source
	--ignore-errors : efface même s'il y a eu des erreurs E/S
	--force : force la suppression de répertoires même non-vides
	$DIR_SOURCE : répertoire source
	$DIR_DEST : répertoire destination
Cette ligne de commande va donc transférer le contenu de $DIR_SOURCE 
vers la destination $DIR_DEST.
-----------------------------------------------
rsync -rltgoDv --del --ignore-errors --force DIR_SOURCE DIR_DEST ;"
rsync -rltgoDv --del --ignore-errors --force "$DIR_SOURCE" "$DIR_DEST" ;
}

Journal "Chargement..." "SOLUTION002"
function SOLUTION002 {
	zenity --info --no-wrap --text="Proposition Sorbus
	-a : équivalent à -rlptgoD. C'est un moyen rapide de dire que vous voulez la récursion 
	et de préserver pratiquement tout
Par rapport aux options choisies par soupaloignon, la proposition de Sorbus ajoute les options :
	-p : provoque la mise à jour des permissions sur la destination pour qu'elles soient identiques 
	aux permissions sur la source.
	--stats : affiche quelques statistiques de transfert de fichiers, ce qui permet de vérifier 
	l'efficacité de la sauvegarde.
Mais les options --ignore-errors et --force ne sont pas utilisées.
	$DIR_SOURCE : répertoire source
	$DIR_DEST : répertoire destination
-----------------------------------------------
rsync -av --del --stats DIR_SOURCE DIR_DEST ;" ;
rsync -av --del --stats "$DIR_SOURCE" "$DIR_DEST" ;
}

Journal "Chargement..." "SOLUTION003"
function SOLUTION003 {
	zenity --info --no-wrap --text="Proposition poupoul2
Proposition similaire à celle de Sorbus, 
avec cependant deux différences par rapport aux propositions de Sorbus et de soupaloignon :
	le choix de l'option --progress plutôt que de l'option -v
	le choix de l'option --delete plutôt que de l'option --del
	--progress : montre l'avancement pendant le transfert.
	--delete : efface avant le transfert les fichiers qui n'existent pas sur la source.
	--del : efface au cours du transfert (pas avant) les fichiers qui n'existent pas sur la source.
	$DIR_SOURCE : répertoire source
	$DIR_DEST : répertoire destination
-----------------------------------------------
rsync -a --stats --progress --delete DIR_SOURCE DIR_DEST ;" ;
rsync -a --stats --progress --delete "$DIR_SOURCE" "$DIR_DEST" ;
}

Journal "Chargement..." "sauvegarde"
function sauvegarde {
	zenity --info --no-wrap --text="
	# $FICHIER_SYNC : fichier sync
	# $DIR_SOURCE : répertoire source
	# $DIR_DEST : répertoire destination
	# OPTIONS : $OPTIONS"
rsync -"$OPTIONS" "$DIR_SOURCE" "$DIR_DEST" ;
}

# echo "La commande de sauvegarde a terminé son travail..." ;
# echo "Vérifiez dans le terminal s'il n'y a pas eu d'erreur !" ;

Journal "Chargement..." "frm_principale"
function frm_principale {
# Journal "*******************frm_principale*******************"
LAQUESTION="https://doc.ubuntu-fr.org/tutoriel/sauvegarder_home_avec_rsync
---------------------------------------------------------------------
Ce module crée une liste de choix pour faire des synchronisations de dossiers
selon trois méthodes"
KH="Ouvrir .SYNC" ;
VH="$FICHIER_SYNC" ;
KI="Sauve .SYNC" ;
VI="double-cliquez ici !" ;
KA="DIR_SOURCE" ;
VA="$DIR_SOURCE" ;
KB="DIR_DEST" ;
VB="$DIR_DEST" ;
KC="Choisir OPTIONS" ;
VC="$OPTIONS" ;
KD="lancer	>>" ;
VD="soupaloignon :	-rltgoDv --del --ignore-errors --force" ;
KE="		>>";
VE="Sorbus :			-av --del--stats" ;
KF="		>>" ;
VF="poupoul2 :		-a --stats --progress --delete" ;
KG="		>>" ;
VG="Voir Explications" ;
KJ="Aide	>>" ;
VJ="Utilisation" ;

zenity --list --width=1300 --height=600 --text="$LAQUESTION" \
--ok-label="Sélectionner" \
--cancel-label="quitter" \
--hide-column 1 --column "" --column "choix" --column "Valeur" \
0 "============" "double cliquez sur une ligne pour l'ouvrir" \
8 "$KH" "$VH" \
9 "$KI" "$VI" \
0 "============" "===============================================================" \
1 "$KA" "$VA" \
2 "$KB" "$VB" \
0 "============" "===============================================================" \
4 "$KD" "$VD" \
5 "$KE" "$VE" \
6 "$KF" "$VF" \
0 "============" "===============================================================" \
10 "$KJ" "$VJ" \
7 "$KG" "$VG" \
0 "============" "===============================================================" ; #

# 0 "" "" \
# 0 "********" "mettre options sans le premier -" \
# 3 "$KC" "$VC" \
}

Journal "Chargement..." "frm_principale_parser"
function frm_principale_parser {
Journal "frm_principale_parser : $1"
	case $1 in
		1) SetDIR_SOURCE ;;
		2) SetDIR_DEST ;;
		# 3) action 3 ;;
		4) SOLUTION001 ;;
		5) SOLUTION002 ;;
		6) SOLUTION003 ;;
		7) VoirInfos ;;
		8) ChoisirSync ;;
		9) SauverSync ;;
		10) VoirUtilisation ;;
		0) echo "" ;;
		*) #quitter="1"
			_quitter ;;
	esac
}

Journal "Chargement..." "_main"
function _main {
# Journal "_main" ;
	menuchoice=$(frm_principale) ;
	Journal "menuchoice=${menuchoice%|*}"
	frm_principale_parser ${menuchoice%|*} ; # pour corriger le 1|1
	if [ $quitter!="1" ] ; then
		# on boucle _main tant que quitter est différent de 1
		_main
	fi
}

Journal "lancement..." "main principal"
_main
exit 0

Pour lancer :

cd $HOME/bin
./sauvegarde

En ligne