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

<<

2017

>>

<<

Novembre

>>

Aujourd’hui

LuMaMeJeVeSaDi
  12345
6789101112
13141516171819
20212223242526
27282930   

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


Sur le Web

15 juin - Sans titre

15 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par ID34

15 juin - How to recover from crash due to full filesystem 🔥

15 juin - Recovering instance from crash due to full filesystem

14 juin - Nocode libéré, délivré

14 juin - Présentation de Fougère Légère

14 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par pyg

14 juin - Comment lier les réponses à Google sheet

14 juin - Commentaires sur Khrys’presso du lundi 10 juin 2024 par Khrys

14 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par Spirio

14 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par Abby Hammes

14 juin - LDAP Authentication Issue

14 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par pyg

13 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par Spirio

13 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par pyg

13 juin - Commentaires sur Khrys’presso du lundi 10 juin 2024 par Krikri

13 juin - Commentaires sur Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services par Jee

13 juin - Sans titre

13 juin - Dégooglisons Internet fête ses 10 ans : mises à jour et nouveaux services

12 juin - Webfinger returning malformed URLs