Interceptar llamadas a rm y, en su lugar, enviar archivos eliminados a la papelera

Interceptar llamadas a rm y, en su lugar, enviar archivos eliminados a la papelera

¿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-trashque puede usar tal cual o crear un alias (ver más abajo).list-trashrestore-trashrmtrash

La semántica del trashcomando es un poco diferente a la estándar rm: no requiere -rbandera 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 trasha 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 rmcomando 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.

información relacionada