有没有办法拦截对 rm 的调用,而不是永久删除文件,而是将它们移至垃圾箱?
答案1
有一个webupd8.org 上的食谱为此。为了防止链接失效,以下是重要信息(附有少量补充)。
sudo apt-get install trash-cli
这将安装trash
、empty-trash
和命令,您可以按原样使用它们或创建list-trash
它们的别名(见下文)。restore-trash
rm
trash
该命令的语义trash
与标准略有不同rm
- 它不需要-r
标志即可删除目录。如果这让您感到困扰,webupd8.org 提出了以下脚本,您可以将其放入 PATH 中并调用它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[@]}"
在 Ubuntu 12.04 及更高版本中,脚本中的最后一条命令应该用trash-put "${cmd[@]}"
代替trash "${cmd[@]}"
(因为命令已从 更改trash
为trash-put
)。
然后使脚本可执行:
chmod +x trash-rm
将它放在你的某个目录中后PATH
,为你的 ~/.bashrc 添加一个别名,这将使 bash 调用你的脚本而不是实际的rm
命令:
alias rm="trash-rm"
正如 djeikyb 正确指出的那样,.bashrc 别名技巧只对 .bashrc 被修改的用户有效,并且仅在 bash 终端会话中有效。
就这样吧。
答案2
自由垃圾(Ubuntu 中的 libtrash 包)似乎可以做到这一点,但我从未使用过它。