#!/bin/bash

backup_path="/var/backups/bash_backups/"
paths_to_backup=""

if [[ ! -d ${backup_path} ]]
then
    mkdir -p ${backup_path}
fi

if [[ $1 != -c ]]
then
    echo -e "utilisation:\n\tbackup.sh -c [chemins séparés par des espaces]"
    exit 1
fi



# attention, doit changer si l'on inclue des options en arguments
# $0 correspond au nom du script
arguments_number=1
# $@ contient tous les arguments passés au script
for arg in $@
do
    # calcule l'incrément de l'argument courant
    ((arguments_number=$arguments_number+1))

    # argument_courant aura la valeur la chaine de caractères
    # '$[incrémentation]' ($0...$9)
    current_argument=\$${arguments_number}

    # on évalue le contenu de l'expression $[incrémentation]
    # soit le contenu des arguments passés au script
    # on enlève le premier '/' pour la commande tar, qui renvoie une erreur sinon
    current_value=`eval echo $current_argument | sed -e 's/^\///g'`

    # on nettoie les noms de dossier des / pour l'inclure dans le nom de l'archive
    # le but de la commande est de supprimer les '/' de début et de fin et de remplacer
    # les autres par des '-' pour le nom de fichier ('/etc/network/' => 'etc-network')
    name="${name}_"`echo $current_value | sed -e 's/^\/// ; s/\/$//g; s/\//-/g'`

    paths_to_backup="${paths_to_backup} ${current_value}"
done

backup_name="${backup_path}${name}"`date +"%m_%d_%Y-%H_%M_%S"`".tgz"

transitional_backup_name="${backup_path}${name}.tgz"

# tar retourne une erreur si les chemins de fichiers commencent par un /
# on doit absolument indiquer un chemin relatif, donc partir d'un point connu.
cd /

if [[ ! -f $transitional_backup_name ]]
then
    echo "Création de la sauvegarde de référence"
    echo "(fichier  $transitional_backup_name)"
    tar -cvzf $transitional_backup_name $paths_to_backup
fi

# effectue un différentiel entre les dossiers choisis et
# ceux présents dans la sauvegarde de référence
tar -d -f $transitional_backup_name $paths_to_backup

# Si il y a des différences, créer une nouvelle sauvegarde horodatée
if [[ $? != 0 ]]
then
    echo "Mise à jour de la sauvegarde de référence"
    echo "(fichier  ${transitional_backup_name})"
    tar -cvzf  $transitional_backup_name $paths_to_backup
    echo -e "Création de la sauvegarde ${backup_name} :\n\tdes dossiers: ${paths_to_backup}\ndans\n\t${backup_path}"
    tar -cvzf $backup_name $paths_to_backup
fi