#!/bin/sh
# backup - Cre une sauvegarde complte ou incrmentale d'un ensemble
#   dfini de rpertoires du systme. Par dfaut, le fichier produit est
#   crit dans /tmp sous forme compacte avec une estampille temporelle
#   dans son nom.
# Pour obtenir un autre comportement, spcifiez un priphrique de
#   sortie (un autre disque, ou un priphrique de stockage amovible)

usageQuit() 
{ 
cat << "EOF" >&2
Syntaxe: $0 [-o sortie] [-i|-f] [-n] 
  -o permet de spcifier un autre fichier/priphrique de sauvegarde
  -i est une sauvegarde incrmentale; -f est une sauvegarde complte,
  -n ne met pas l'estampille temporelle  jour en cas de sauvegarde
     incrmentale.
EOF
  exit 1 
}

compress="bzip2"                #  remplacer par votre programme de 
                                #   compression prfr
 output="/tmp/backup.$(date +%d%m%y).bz2" 
 tsfile="$HOME/.backup.timestamp"
  btype="incremental"           # par dfaut, on fait une sauvegarde 
                                #   incrmentale
  noinc=0                       # et on met  jour l'estampille temporelle

while getopts "o:ifn" arg; do
  case "$arg" in
    o ) output="$OPTARG"        ;;
    i ) btype="incremental"     ;;
    f ) btype="full"            ;;
    n ) noinc=1                 ;;
    ? ) usageQuit               ;;
  esac
done

shift $(( $OPTIND - 1 ))

echo "Je mne une sauvegarde de type $btype,"
echo "   je sauvegarde la sortie dans $output"

timestamp="$(date +'%m%d%I%M')"

if [ "$btype" = "incremental" ] ; then
  if [ ! -f $tsfile ] ; then  
    echo "Erreur: je ne peux mener une sauvegarde incrmentale:" >&2
    echo "        pas de fichier d'estampille temporelle" >&2  
    exit 1
  fi 
  find $HOME -depth -type f -newer $tsfile -user ${USER:-LOGNAME} | \
    pax -w -x tar | $compress > $output 
  failure="$?" 
else 
  find $HOME -depth -type f -user ${USER:-LOGNAME} | \
    pax -w -x tar | $compress > $output 
  failure="$?" 
fi

if [ "$noinc" = "0" -a "$failure" = "0" ] ; then
  touch -t $timestamp $tsfile 
fi 

exit 0
