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 , trash
e , que você pode usar como estão ou criar um alias (veja abaixo).empty-trash
list-trash
restore-trash
rm
trash
A semântica do trash
comando é um pouco diferente do padrão rm
- não requer -r
flag 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 trash
para 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 rm
comando 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.