#!/bin/sh

# newrm remplace la commande rm existante et fournit une fonctionnalit
#   rudimentaire de recouvrement des fichiers dtruits en crant et
#   recourant  un nouveau rpertoire, situ dans le rpertoire
#   personnel de l'utilisateur. Capable de traiter le cas des
#   rpertoires aussi bien que celui des fichiers, il dtruira les
#   fichiers SANS les archiver si l'utilisateur prcise l'option -f.

# Avertissement Trs Important: il convient de prvoir un job cron ou
#   assimil pour garder les corbeilles sous contrle. Dans le cas
#   contraire, rien ne sera jamais effac du systme et vous manquerez
#   d'espace disque!

mydir="$HOME/.deleted-files" 
realrm="/bin/rm" 
copy="/bin/cp -R"

if [ $# -eq 0 ] ; then # c'est 'rm' qui produira le message d'erreur
  exec $realrm         # le shell est remplac par le processus /bin/rm 
fi

# Inspecte tous les arguments  la recherche de '-f'

flags=""

while getopts "dfiPRrvW" opt 
do 
  case $opt in
    f ) exec $realrm "$@"     ;; # exec permet de quitter directement ce script
    * ) flags="$flags -$opt"  ;; # ces arguments sont pour rm, pas pour nous 
  esac 
done 
shift $(( $OPTIND - 1 ))

# On s'assure que le rpertoire $mydir existe

if [ ! -d $mydir ] ; then
  if [ ! -w $HOME ] ; then
    echo "chec de $0: je ne peux crer $mydir sous $HOME" >&2
    exit 1
  fi
  mkdir $mydir
  chmod 700 $mydir               # respectons l'intimit, que diable!
fi

for arg
do 
  newname="$mydir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")" 
  if [ -f "$arg" ] ; then
    $copy "$arg" "$newname"
  elif [ -d "$arg" ] ; then
    $copy "$arg" "$newname"
  fi 
done

exec $realrm $flags "$@"        # le shell est remplac par /bin/rm 
