La corbeille sous le shell

vendredi 17 décembre 2010
par  Olivier Duquesne (DaffyDuke)
popularité : 1%

Et oui, qui n’a jamais rippé sur le rm et souhaité vouloir récupérer ses fichiers, les a cherché dans la corbeille GNOME, a cherché après un undelete quelconque. A on aimerait avoir l’option "undo" à rm. Mais non, que neni, ce n’est pas dans la philosophie des administrateurs systèmes....

Un ami (Christophe Van Renterghem) vient de coder une solution pour remédier à ce manque, un frontend à rm afin de sécuriser la commande, mieux que l’option -i (interactive). Cette fois, rm déplace les fichiers ou les dossiers à supprimer dans la corbeille de GNOME et ajoute un timestamp qui va bien si une version existe déjà... Le script fonctionne sous une Ubuntu Maverick. L’absence de shell en début de script est normal, il est inclus par le .barshrc. Et surtout, n’oubliez pas de positionner un alias sur la commande rm pour passer dans les fonctions ci-dessous :

Le voici ci-dessous (.rm.bash) :

# mode debug
# set -x

# Pas de paramètres, on sort
if [ $# -eq 0 ]
then
        exit 1
fi

recursive=1
nobin=1
optNoBin=-
optFileOrDir=-
param=1
# Options passées (r=récursif, f=force, s=suppression définitive, i=interactif, v=verbeux)
while getopts hHrRfFsSiIvV arg
do
        param=0
        case $arg in
               h | H)        echo "usage: rm [-frsiv] file ... (f=force, r=recursive, s=suppress definitively, i=interactive, v=verbose)"       
                        exit 0;;
               r | R)        recursive=0
                        optNoBin=${optNoBin}r;;
               f | F)        optNoBin=${optNoBin}f
                        optFileOrDir=${optFileOrDir}f;;
               s | S)        nobin=0;;
               i | I)        optNoBin=${optNoBin}i
                        optFileOrDir=${optFileOrDir}i;;
               v | V)        optNoBin=${optNoBin}v
                        optFileOrDir=${optFileOrDir}v;;
                \?)        exit 2;;
       esac
done

if [ ${optNoBin} = "-" ]
then
        optNoBin=
fi
if [ ${optFileOrDir} = "-" ]
then
        optFileOrDir=
fi

if [ $param -eq 0 ]
then
        shift
fi

# Répertoire Poubelle
directory=~/.local/share/Trash/files

while [ $# -gt 0 ]
do
        # Suppression définitive
        if [ $nobin -eq 0 ]
        then
                /bin/rm ${optNoBin} "$1"
        #Poubelle
        else
                fullName=`readlink -f "$1"`
                name=`basename "${fullName}"`
                dirname=`dirname "${fullName}"`

                # Fichier ou répertoire déjà existant dans la corbeille
                if [ -e "${directory}/${name}" ]
                then
                        name=${name}.`date +%s`
                        fullName=${dirname}/${name}
                fi
                newDest=${directory}/${name}
                ok=0
                # Fichier ou répertoire inexistant
                if [ ! -e "$1" ]
                then
                        ok=1
                        echo "$1: No such file or directory"
                # rm (-f) fichier
                elif [ -f "$1" ]
                then
                        mv $optFileOrDir "$1" "${newDest}"
                # rm -r(f) répertoire
                elif [ -d "$1" -a $recursive -eq 0 ]
                then
                        mv $optFileOrDir "$1" "${newDest}"
                # rm (-f) répertoire => erreur
                elif [ -d "$1" ]
                then
                        ok=1
                        echo "rm: $1 is a directory"
                else
                        ok=1
                fi

                # Ecriture des infos de restaure du fichier
                if [ $ok -eq 0 ]
                then
                        trashinfo=~/.local/share/Trash/info/$name.trashinfo
                        echo "[Trash Info]" > "$trashinfo"
                        echo "Path=$fullName" >> "$trashinfo"
                        echo "DeletionDate=`date +%FT%T`" >> "$trashinfo"
                fi
        fi
        shift
done

exit 0

Commentaires

Agenda

<<

2019

>>

<<

Septembre

>>

Aujourd’hui

LuMaMeJeVeSaDi
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Annonces

Annuaire LibreNord

Retrouvez l’annuaire de logiciels libres créé par l’association Club Linux Nord-Pas de Calais sur le site suivant http://www.librenord.org