拦截对rm的调用,并将已删除的文件定向到垃圾箱

有没有办法拦截对rm的调用,而不是永久删除文件,而是将它们移动到垃圾箱?

webupd8.org上有一个食谱 。 为了防止链接腐烂,这里是重要信息(添加一些内容)。

sudo apt-get install trash-cli 

这将安装trashempty-trashlist-trashrestore-trash命令,您可以按原样使用这些命令,或者将trash设为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 )。

然后使脚本可执行:

 chmod +x trash-rm 

一旦在PATH某个目录中有了它,就为〜/ .bashrc添加一个别名,这将使bash调用你的脚本而不是实际的rm命令:

 alias rm="trash-rm" 

正如djeikyb正确指出的那样,.bashrc别名技巧只适用于修改了.bashrc的用户,并且仅适用于bash终端会话。

这应该是它。

libtrash (Ubuntu中的包libtrash)似乎是这样做的,但我从未使用它。