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

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

22 septembre - Garder les couleurs d'utilisateur sur Framapad

22 septembre - Commentaires sur Sepia Search : notre moteur de recherche pour découvrir PeerTube par ljf

22 septembre - Commentaires sur Sepia Search : notre moteur de recherche pour découvrir PeerTube par Chocobozzz

22 septembre - Commentaires sur Sepia Search : notre moteur de recherche pour découvrir PeerTube par Stéphane Bortzmeyer

22 septembre - Framasoft: “Introducing SepiaSearch, our s…”

22 septembre - Framasoft: “Voici SepiaSearch, notre moteu…”

22 septembre - Sepia Search : our search engine to promote PeerTube

22 septembre - Sepia Search : notre moteur de recherche pour découvrir PeerTube

22 septembre - Disparition de l'application "Cercle" dans framagenda

22 septembre - Commentaires sur Liiibre, une solution complète pour vos projets collaboratifs par Thomas Renz

22 septembre - Commentaires sur Khrys’presso du lundi 21 septembre 2020 par Thomas Renz

21 septembre - Framasoft: “[#Job] …”

21 septembre - Commentaires sur Annuaire des acteurs et actrices de l’accompagnement au numérique libre par laurent

21 septembre - Commentaires sur Annuaire des acteurs et actrices de l’accompagnement au numérique libre par Lunar

21 septembre - Commentaires sur Liiibre, une solution complète pour vos projets collaboratifs par JosephK

21 septembre - Wiki pour les "PeerTubeurs"

21 septembre - Framasoft: “Ce week-end, à l'occasion de l…”

21 septembre - Commentaires sur Annuaire des acteurs et actrices de l’accompagnement au numérique libre par Angie

21 septembre - Commentaires sur L’Atelier du Chat Perché et les outils libres par Angie

21 septembre - Framasoft: “Ce matin, la revue du web de K…”