#!/bin/sh

# unrm - Inspecte l'archive des fichiers dtruits  la recherche du
#   fichier ou du rpertoire spcifi. Si plusieurs candidats
#   correspondent, donne la liste des rsultats, tris par estampille
#   temporelle, et laisse l'utilisateur indiquer quelle version
#   restaurer.

mydir="$HOME/.deleted-files" 
realrm="/bin/rm" 
move="/bin/mv"

dest=$(pwd)

if [ ! -d $mydir ] ; then 
  echo "$0: Aucun fichier ou rpertoire archiv; rien  restaurer" >&2 ; exit 1 
fi

cd $mydir

if [ $# -eq 0 ] ; then   # par d'arguments, on donne simplement la liste
  echo "Contenu de votre archive de fichiers dtruits (tris par date):" 
  ls -FC | sed -e 's/\([[:digit:]][[:digit:]]\.\)\{5\}//g' \
    -e 's/^/  /' 
  exit 0 
fi


# Sinon il faut disposer d'un motif propos par l'utilisateur et avec
#   lequel travailler. Voyons si ce motif correspond  un ou plusieurs
#   fichiers ou rpertoires de l'archive.

matches="$(ls *"$1" 2> /dev/null | wc -l)"

if [ $matches -eq 0 ] ; then 
  echo "Rien ne correspond  $1 dans l'archive des fichiers dtruits." >&2 
  exit 1
fi

if [ $matches -gt 1 ] ; then 

  echo "Plusieurs fichiers ou rpertoires trouvs dans l'archive:" 
  index=1 
  for name in $(ls -td *"$1") 
  do
    datetime="$(echo $name | cut -c1-14| \
      awk -F. '{ print $5"/"$4"  "$3":"$2":"$1 }')"

  if [ -d $name ] ; then 
    size="$(ls $name | wc -l | sed 's/[^[:digit:]]//g')" 
    echo " $index)   $1   (contient = ${size} objets, effac le $datetime)"
  else
    size="$(ls -sdk1 $name | awk '{print $1}')"
    echo " $index)   $1   (taille = ${size} Ko, effac le $datetime)"
  fi

  index=$(( $index + 1))
  done
  echo ""
  echo -n "Quelle version de $1 souhaitez-vous restaurer ('0' pour quitter)? [1] : "
  read desired

  if [ ${desired:=1} -ge $index ] ; then
    echo "$0: restauration annule par l'utilisateur: valeur d'indice trop leve." >&2
    exit 1

  fi

  if [ $desired -lt 1 ] ; then
    echo "$0: restauration annule par l'utilisateur." >&2 ; exit 1
  fi

  restore="$(ls -td1 *"$1" | sed -n "${desired}p")"

  if [ -e "$dest/$1" ] ; then
    echo "$1 existe dj dans ce rpertoire. Je ne peux pas l'craser." >&2  
    exit 1
  fi

  echo -n "Fichier $1 en cours de restauration..."
   $move "$restore" "$dest/$1"
  echo "termin."

  echo -n "Effacer les autres versions de ce fichier? [y] "
  read answer

  if [ ${answer:=y} = "y" ] ; then
    $realrm -rf *"$1"
    echo "elles sont effaces."
  else
    echo "les autres copies sont conserves." 
  fi

else

  if [ -e "$dest/$1" ] ; then
    echo "$1 existe dj dans ce rpertoire. Je ne peux pas l'craser." >&2  
    exit 1
  fi

  restore="$(ls -d *"$1")"

  echo -n "Fichier $1 en cours de restauration..."
   $move "$restore" "$dest/$1"
  echo "termin."

fi

exit 0
