¿Hay alguna forma de interceptar llamadas a rm y, en lugar de eliminar permanentemente los archivos, moverlos a la papelera?
¿Hay alguna forma de interceptar llamadas a rm y, en lugar de eliminar permanentemente los archivos, moverlos a la papelera?
Respuestas:
Hay una receta en webupd8.org para esto. Para evitar la descomposición del enlace, aquí está la información importante (con algunas adiciones).
sudo apt-get install trash-cli
Esto instalará trash, empty-trash, list-trashy restore-trashcomandos, que puede utilizarse como está o hacen rmun alias de trash(ver más abajo).
La semántica del trashcomando es un poco diferente al estándar rm: no requiere -rmarca para poder eliminar directorios. Si esto le molesta, webupd8.org propone el siguiente script, que puede poner en su 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 en el script debe ser en trash-put "${cmd[@]}"lugar de trash "${cmd[@]}"(ya que el comando ha cambiado de trasha trash-put).
Luego haga que el script sea ejecutable:
chmod +x trash-rm
Una vez que lo tenga en algún directorio en su PATH, agregue un alias a su ~ / .bashrc, lo que hará que bash invoque su script en lugar del rmcomando real :
alias rm="trash-rm"
Como djeikyb señala correctamente, el truco de alias .bashrc solo funcionaría para el usuario cuyo .bashrc se modifica, y solo en la sesión de terminal bash.
Y eso debería ser todo.
alias="trash"). ¿Sabes cuál es la ventaja de tener el script?
trashque se comporte más como rmen lo que respecta a la eliminación de directorios. Esto puede ser importante para algunos scripts que esperan rmfuncionar de la manera en que lo hacen, por ejemplo. Actualicé la respuesta.
libtrash (paquete libtrash en Ubuntu) parece hacer esto, pero nunca lo he usado.