#! /bin/bash

# aSauver.sh - pour crÃÂÃÂ©er des liens en dur
# faisant office de 'sauvegarde' contre les effacements accidentels
# pour un ensemble de sous-rÃÂÃÂ©pertoires choisis par l'utilisateur

# si ce script est lancÃÂÃÂ© sans argument :
# il crÃÂÃÂ©e des liens en dur pour tous les fichiers des rÃÂÃÂ©pertoires ÃÂÃÂ  protÃÂÃÂ©ger crÃÂÃÂ©ÃÂÃÂ©s il y a moins de 5 mn
# ÃÂÃÂ  lancer toutes les 5 mn par crond

# si lancÃÂÃÂ© avec l'argument init : efface le contenu du rÃÂÃÂ©pertoire contenant les liens en dur 
# et crÃÂÃÂ©e des liens en dur pour tous les fichiers, sert la premiÃÂÃÂ¨re fois pour initialiser le dispositif
# puis chaque fois qu'on veut faire place nette



# variable abritant le chemin complet du rÃÂÃÂ©pertoire contenant les liens symboliques 
# vers les rÃÂÃÂ©pertoires ÃÂÃÂ  sauvegarder 
DIR_A_SAUVER=$HOME/Reps_A_Sauver

# on le crÃÂÃÂ©e s'il n'existe pas mais comme il sera vide aucun lien en dur ne sera crÃÂÃÂ©ÃÂÃÂ©
if [ ! -e "$DIR_A_SAUVER" ] ; then

   mkdir "$DIR_A_SAUVER"

fi

# variable abritant le nom du rÃÂÃÂ©pertoire contenant les liens en dur
NOM_DIR_LIENS=".sauv"

# variable abritant le chemin complet du rÃÂÃÂ©pertoire contenant les liens en dur
DIR_LIENS="$HOME/$NOM_DIR_LIENS"

if [ "$1" = init ] ; then # initialisation ou mÃÂÃÂ©nage

    if [ -e "$DIR_LIENS" ] ; then # on supprime le rÃÂÃÂ©pertoire contenant les liens s'il existe

	echo  "Attention le contenu du rÃÂÃÂ©pertoire $DIR_LIENS va ÃÂÃÂªre irrÃÂÃÂ©mÃÂÃÂ©diablement effacÃÂÃÂ© !"
        echo  "Tapez o pour continuer, une autre touche sinon."
	read
	if [ "$REPLY" == "o" ] || [ "$REPLY" == "O" ] ; then
	  rm -Rf $DIR_LIENS
        else
	  exit 0
        fi

	rm -Rf $DIR_LIENS

    fi

    mkdir $DIR_LIENS   # on crÃÂÃÂ©e un nouveau rÃÂÃÂ©pertoire pour les liens

else

    if [ ! -e "$DIR_LIENS" ] ; then # on quitte si le rÃÂÃÂ©pertoire des liens n'existe pas
	echo "Lancer le script avec l'argument init pour sauvegarder tous les fichiers !!"
        exit
    fi

fi

cd $DIR_A_SAUVER


# Trouver tous les rÃÂÃÂ©pertoires                      (find */ -type d)
# dans */ la barre oblique est indispensable
# CrÃÂÃÂ©ÃÂÃÂ©r rÃÂÃÂ©pertoires correspondants sous $DIR_LIENS       (-exec ... \;)
if [ "$1" = init ] ; then

find */  -type d  -print -exec mkdir $DIR_LIENS/{} \;

else # grÃÂÃÂ¢ce ÃÂÃÂ  l'option '-mmin -5' seuls les rÃÂÃÂ©pertoires crÃÂÃÂ©ÃÂÃÂ©s il y a moins de 5 minutes sont rÃÂÃÂ©pliquÃÂÃÂ©s

find */  -type d  -mmin -5 -print -exec mkdir $DIR_LIENS/{} \;

fi



# CrÃÂÃÂ©er liens EN DUR sous $DIR_LIENS   (-exec ... \;)
if [ "$1" = init ] ; then

find */  -type f  -print -exec ln {} $DIR_LIENS/{} \;

else

# grÃÂÃÂ¢e ÃÂÃÂ  l'option '-mmin -5' on ne crÃÂÃÂ©e de lien que pour les fichiers
# crÃÂÃÂ©ÃÂÃÂ©s il y a moins de 5 minutes

# grÃÂÃÂ¢ce ÃÂÃÂ  l'option  -f de ln : si fich a un lien dans .sauv
# et si fich est effacÃÂÃÂ© puis recrÃÂÃÂ©ÃÂÃÂ© le lien 
# pointera vers la derniÃÂÃÂ¨re version de fich ; 
# sans -f on aurait dans ce cas un message d'erreur

find */  -type f  -mmin -5 -print -exec ln -f {} $DIR_LIENS/{} \;

fi

exit 0
##ÃÂ§UTF-8ÃÂ§##
##ÃÂ§UTF-8ÃÂ§##
##ÃÂ§UTF-8ÃÂ§##
