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

<<

2021

>>

<<

Février

>>

Aujourd’hui

LuMaMeJeVeSaDi
1234567
891011121314
15161718192021
22232425262728

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

3 juin - Des utilisateurs à virer

3 juin - Sans titre

3 juin - Khrys’presso du lundi 3 juin 2024

2 juin - Envoûtement amoureux.+229 52807556

2 juin - Rituel pour éloigner une rivalité

2 juin - Mobilizon - demo of version 5.0.1

2 juin - Mobilizon contributors meeting

2 juin - Lors du transfert de stockage vers un autre serveur, le volume augmente

2 juin - Retour affectif amoureux immédiat. Tél: +229 6128 6208, Retour affectif immédiat gratuit, Rituel de retour affectif amoureux

2 juin - Sortilège pour rendre un Homme fou amoureux de vous. Tél:+22961286208, Retour affectif amoureux immédiat, Envoûtement amoureux rapide

2 juin - Retour affectif paiement après résultat. Tél: +229 6128 6208, Retour affectif amoureux immédiat, Retour affectif rapide en 24h

2 juin - Rituel pour faire tomber quelqu’un amoureux de toi. Tél: +22961286208, Retour affectif amoureux immédiat, Envoûtement amoureux rapide marabout

2 juin - Retour affectif marabout en France. Tél: +229 6128 6208, médium retour affectif sérieux gratuit

2 juin - Retour affectif rapide en 24h. Tél: +229 6128 6208, Retour affectif amoureux immédiat, Envoûtement d'amour rapide et efficace

2 juin - Envoûtement amoureux rapide et efficace. Tél: +229 6128 6208, médium du retour affectif amoureux immédiat

2 juin - Retour affectif immédiat gratuit, Tél: +229 6128 6208, Retour de l'être aimé en 24h gratuit

2 juin - Retour affectif amoureux immédiat, Tél: +229 6128 6208, Envoûtement amoureux rapide

1er juin - Tetra débutants

31 mai - Erreur de nommage de compte Mobilizon

31 mai - Erreur de nommage de compte