Existe-t-il un moyen d'intercepter les appels de rm et, au lieu de supprimer définitivement les fichiers, de les déplacer vers la corbeille?
Il y a un recette sur webupd8.org pour cela. Pour prévenir la pourriture des liens, voici les informations importantes (avec quelques ajouts).
Sudo apt-get install trash-cli
Ceci installera les commandes trash
, empty-trash
, list-trash
et restore-trash
, que vous pouvez utiliser tels quels ou faire de rm
un alias de trash
. (voir ci-dessous).
La sémantique de la commande trash
est un peu différente de la norme rm
- elle n’exige pas le drapeau -r
pour pouvoir supprimer des répertoires. Si cela vous dérange, webupd8.org propose le script suivant, que vous pouvez mettre dans votre PATH et l'appeler trash-rm
:
#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"; do
case "$f" in
(-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
tmp="${f//[rR]/}"
if [ -n "$tmp" ]; then
#echo "\$tmp == $tmp"
cmd[$i]="$tmp"
((i++))
fi
recursive=0
;;
(--recursive) recursive=0
;;
(*)
if [ $recursive != 0 -a -d "$f" ]; then
echo "skipping directory: $f"
continue
else
cmd[$i]="$f"
((i++))
fi
;;
esac
done
trash "${cmd[@]}"
Dans Ubuntu 12.04 et les versions ultérieures, la dernière commande du script devrait être trash-put "${cmd[@]}"
au lieu de trash "${cmd[@]}"
(car la commande est passée de trash
à trash-put
).
Ensuite, rendre le script exécutable:
chmod +x trash-rm
Une fois que vous l'avez dans un répertoire de votre PATH
, ajoutez un alias à votre ~/.bashrc, ce qui obligera bash à appeler votre script à la place de la commande rm
actuelle:
alias rm="trash-rm"
Comme le souligne correctement djeikyb, l'astuce d'alias .bashrc ne fonctionnerait que pour l'utilisateur dont le fichier .bashrc est modifié, et uniquement lors d'une session de terminal bash.
Et ça devrait être ça.
libtrash (le paquet libtrash dans Ubuntu) semble le faire, mais je ne l'ai jamais utilisé.