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=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+cmVhZGxpbmsgLWYgJnF1b3Q7JDEmcXVvdDs8L2NvZGU+"></span>
		name=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+YmFzZW5hbWUgJnF1b3Q7JHtmdWxsTmFtZX0mcXVvdDs8L2NvZGU+"></span>
		dirname=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZGlybmFtZSAmcXVvdDske2Z1bGxOYW1lfSZxdW90OzwvY29kZT4="></span>

		# Fichier ou répertoire déjà existant dans la corbeille
		if [ -e "${directory}/${name}" ]
		then
			name=${name}.<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZGF0ZSArJXM8L2NvZGU+"></span>
			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=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZGF0ZSArJUZUJVQ8L2NvZGU+"></span>" >> "$trashinfo"
		fi
	fi
	shift
done

exit 0

Documents joints

PDF - 63.3 kio

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

18 août - Commentaires sur Lokas : l’app pour enregistrer et transcrire vos réunions en toute confidentialité par oceating disorders

18 août - Commentaires sur Lokas : l’app pour enregistrer et transcrire vos réunions en toute confidentialité par taimur ansari

18 août - Sans titre

18 août - Khrys’presso du lundi 18 août 2025

17 août - Framagit : mise à jour mermaid possible?

17 août - Équivalent Netvibes ou Padlet ou Smart.me

17 août - Videos not syncing with YouTube

16 août - Peertube qui se ferme tout seul à la lecture de vidéos

14 août - Expedi𝓪?® Customer Service® Contact Number In The USA? – A Detailed Guide

14 août - Full List of QuickBooks®️ Payroll & Desktop Support Number in the USA: A Comprehensive 2025 Guide

14 août - Complete List of Frontier Airlines®️ Customer®️ Contact®️ Numbers in USA : An Updated Guide 2025

14 août - Complete List of Delta Airlines®️ Customer®️ Contact®️ Numbers in USA : An Updated Guide 2025

14 août - Quick List of Official Expedi𝓪™️REservation™️ Contact Numbers in the USA : the StepbyStep Detailed Guide

14 août - Live Agent ╰➤Frontier™️Airlines®️ USA™: A Step-by-Step Guide

14 août - Hi, i am new users aganin

14 août - **Official Full List of »•»Frontier Airlines«•« Customer Contact

14 août - Jetstar Airlines® Customer® USA Contact Numbers: A Step By Step Guide

14 août - Live Agent ╰➤Delta™️Airlines®️ USA™: A Step-by-Step Guide

14 août - **Official Full List of »•»Delta Airlines«•« Customer Contact

14 août - Seaborne Airlines®️ Customer Service™️ Contact Numbers [Full USA List – 2025]