Interceptando chamadas para rm e direcionando arquivos excluídos para a lixeira

Interceptando chamadas para rm e direcionando arquivos excluídos para a lixeira

Existe uma maneira de interceptar chamadas para rm e, em vez de excluir permanentemente os arquivos, movê-los para a lixeira?

Responder1

Há umreceita em webupd8.orgpor esta. Para evitar o apodrecimento do link, aqui estão as informações importantes (com alguns acréscimos).

sudo apt-get install trash-cli

Isso instalará os comandos , trashe , que você pode usar como estão ou criar um alias (veja abaixo).empty-trashlist-trashrestore-trashrmtrash

A semântica do trashcomando é um pouco diferente do padrão rm- não requer -rflag para poder excluir diretórios. Se isso te incomoda, webupd8.org propõe o seguinte script, que você pode colocar no seu PATH e chamá-lo 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[@]}"

No Ubuntu 12.04 e posterior, o último comando no script deve ser trash-put "${cmd[@]}"em vez de trash "${cmd[@]}"(já que o comando mudou de trashpara trash-put).

Em seguida, torne o script executável:

chmod +x trash-rm

Depois de colocá-lo em algum diretório em seu arquivo PATH, adicione um alias ao seu ~/.bashrc, o que fará com que o bash invoque seu script em vez do rmcomando real:

alias rm="trash-rm"

Como djeikyb aponta corretamente, o truque do alias .bashrc só funcionaria para o usuário cujo .bashrc foi modificado e apenas na sessão do terminal bash.

E deveria ser isso.

Responder2

libtrash(pacote libtrash no Ubuntu) parece fazer isso, mas nunca usei.

informação relacionada