¿Hay alguna manera de interceptar llamadas a rm y, en lugar de eliminar permanentemente los archivos, moverlos a la papelera?
Respuesta1
Hay unareceta en webupd8.orgpara esto. Para evitar que el enlace se pudra, aquí está la información importante (con algunas adiciones).
sudo apt-get install trash-cli
Esto instalará los comandos , y trash
, empty-trash
que puede usar tal cual o crear un alias (ver más abajo).list-trash
restore-trash
rm
trash
La semántica del trash
comando es un poco diferente a la estándar rm
: no requiere -r
bandera para poder eliminar directorios. Si esto te molesta, webupd8.org propone el siguiente script, que puedes poner en tu RUTA y llamarlo 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[@]}"
En Ubuntu 12.04 y versiones posteriores, el último comando del script debería ser trash-put "${cmd[@]}"
en lugar de trash "${cmd[@]}"
(ya que el comando cambió de trash
a trash-put
).
Luego haga que el script sea ejecutable:
chmod +x trash-rm
Una vez que lo tenga en algún directorio de su archivo PATH
, agregue un alias a su ~/.bashrc, lo que hará que bash invoque su script en lugar del rm
comando real:
alias rm="trash-rm"
Como señala correctamente djeikyb, el truco del alias .bashrc solo funcionaría para el usuario cuyo .bashrc está modificado, y solo en la sesión del terminal bash.
Y eso debería ser todo.
Respuesta2
libreria(paquete libtrash en Ubuntu) parece hacer esto, pero nunca lo he usado.