#!/bin/bash
#==============================================================================
# Objet  : Sauvegarde des données utilisateur
#          Synchronisation disque vers support USB
# Auteur : Linux Quimper / Centre des Abeilles / BN
# Date   : 07/12/2017 - 1.0
# MAJ    : 10/02/2018 - 1.1 - Gestion des noms de support USB avec espaces
#
# Détail des arguments utilisés dans la commande rsync :
# -v                mode bavard
# -r                récursif
# -p                préserve permissions
# -t                préserve l'horodatage
# -g                préserve le groupe
# -o                préserve le propriétaire
# --stats           génère des stats de synchronisation
# --exclude-from    utilise les exclusions notées dans un fichier
# --delete-excluded supprime de la destination les fichiers nouvellement exclus
# --delete          supprime de la sauvegarde les fichiers supprimés
#==============================================================================

#----- Procédure de sélection du support USB ----------------------------------
MEDIAS="/media/$LOGNAME"               # Répertoire des points de montage
clear
echo "------------------------------------------"
echo "   Sauvegarde des données sur support USB"
echo "     - Ordinateur  : $HOSTNAME"
echo "     - Utilisateur : $LOGNAME"
echo "------------------------------------------"
declare -a t_USB                       # Liste des supports USB
i=0                                    # Initialisation de l'indice du tableau

IFS=$'\n'                              # Séparateur par défaut = nouvelle ligne
                                       # Pour nom USB comportant des espaces
for s in `ls $MEDIAS`; do              # Recherche des supports USB montés
  i=$((i+1))
  t_USB[$i]=$s                         
done
IFS=$' \t\n'                           # Restauration du séparateur par défaut
                                       # = espace, tabulation, nouvelle ligne
if [ ${#t_USB[@]} -lt 1 ]; then
  echo "****** Aucun support USB disponible ******"
  sleep 3
  exit 0
fi

echo "Q) pour quitter"
PS3="------------------------ Votre choix --> "
select CHOIX in "${t_USB[@]}"; do      # Sélection du support de sauvegarde
  case $REPLY in
    1|2|3|4|5|6|7|8|9 )                # Gestion limitée à 9 supports USB
      if [ ${REPLY} -le ${#t_USB[@]} ]; then
        break                          # Choix limité aux supports détectés
      fi
      ;;
      
    Q|q )
      echo "Abandon de la procédure..."
      exit
      ;;

  esac
done

#----- Procédure de sauvegarde ------------------------------------------------
clear

# Répertoire du script permettant de localiser le fichier des exclusions  
SCRIPT_DIR=`echo $0 | awk -F/ '{$NF="" ; print $0}' | sed -e 's/ /\//g'`
# Fichier des exclusions
EXCLUS=$SCRIPT_DIR"sauvegarde_exclus"
# Chemin de stockage des sauvegardes
DESTI=$MEDIAS/${t_USB[$REPLY]}/Sauvegardes
echo $DESTI
# Journal horodaté des sauvegardes
LOG_DATE=$HOME/Journaux/$(date +%Y%m%d_%H%M).log
[ ! -d $HOME/Journaux ] && mkdir $HOME/Journaux
# Création de l'arborescence utilisateur
[ ! -d "$DESTI" ] && mkdir "$DESTI"
DESTI=$DESTI/$HOSTNAME
[ ! -d "$DESTI" ] && mkdir "$DESTI"
echo
date
echo ------------------------------------------------------
echo " Suppport USB ["${t_USB[$REPLY]}"] sélectionné"
echo " Sauvegarde de [$LOGNAME] en cours..."

echo ---------------------------------------------       >$LOG_DATE
echo " SAUVEGARDE RSYNC DES DONNEES UTILISATEUR"        >>$LOG_DATE
echo ---------------------------------------------      >>$LOG_DATE
echo " Procédure   : $0"                                >>$LOG_DATE
echo " Exclusions  : $EXCLUS"                           >>$LOG_DATE
echo " Utilisateur : $LOGNAME"                          >>$LOG_DATE
echo " Source      : $HOME"                             >>$LOG_DATE
echo " Destination : Support USB ["${t_USB[$REPLY]}"]"  >>$LOG_DATE
echo ---------------------------------------------      >>$LOG_DATE
echo                                                    >>$LOG_DATE
echo -n  ;date                                          >>$LOG_DATE
echo ---------------------------------------------      >>$LOG_DATE
rsync -vrptgo --stats --exclude-from $EXCLUS --delete-excluded --delete "$HOME" "$DESTI" >>$LOG_DATE && echo ' Sauvegarde terminée !' || echo '***** ERREUR sur sauvegarde de :' $HOME '*****'
echo ---------------------------------------------      >>$LOG_DATE

echo -n  ;date                                          >>$LOG_DATE
echo " journal dans [Dossier personnel/Journaux]"
echo " $LOG_DATE"
echo ------------------------------------------------------
date
echo
echo "Voulez-vous consulter le journal de sauvegarde ? [O-N]"
read
case $REPLY in 
  [Oo])
     /usr/bin/gnome-text-editor $LOG_DATE;;
  [Nn])
     exit 0;;
  *)
     exit 1;;
esac