¿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-trash
y restore-trash
comandos, que puede utilizarse como está o hacen rm
un alias de trash
(ver más abajo).
La semántica del trash
comando es un poco diferente al estándar rm
: no requiere -r
marca 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 trash
a 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 rm
comando 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?
trash
que se comporte más como rm
en lo que respecta a la eliminación de directorios. Esto puede ser importante para algunos scripts que esperan rm
funcionar 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.