一个方案就是重定向 rm 命令以嫁接为 mv 命令,相当于给 Linux 系统定制了一个回收站。

实现方式如下:



### 重定义rm命令 ### 

# 定义回收站目录
trash_path='~/.trash'

# 判断 $trash_path 定义的文件是否存在,如果不存在,那么就创建 $trash_path.
if [ ! -d $trash_path ]; then
mkdir -p $trash_path
fi

# 定义别名:使用 rm 就调用 trash
alias rm=trash

# 使用 rl 就调用 'ls ~/.trash'
# 如果更改上面的回收站目录这里的目录也需要修改
alias rl='ls ~/.trash'

# 使用 unrm 就调用 restorefile,需要在删除目录的父目录下执行
alias unrm=restorefile

# 使用 rmtrash 就调用 claearteash
alias rmtrash=cleartrash

# 恢复文件的函数
restorefile()
{
mv -i ~/.trash/$@ ./
}

# 删除文件的函数
trash()
{
mv $@ ~/.trash/
}

# 清空回收站的函数
cleartrash()
{
read -p "确定要清空回收站吗?[y/n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}


最后将上述脚本写入 /etc/bashrc,并立即执行命令 source /etc/bashrc 即刻生效。

 

这个脚本定义了几个命令:

  • rl:查看回收站下的文件。
  • unrm 文件名或目录:恢复到当前的路径下。
  • rmtrash:清空回收站,不过会友好提示。

执行 rm 不会真正删除,而是使用 mv 移动到我们指定的回收站。实在真的想删除可以 /bin/rm 来进行删除。

另外,需要注意的是,之前 rm 指令的一些参数可能不再使用,因为 rm 现在其实是 mv 了。

使用示例:



# touch hoxistest 
# touch 1
# mkdir haha
# ls
1 haha hoxistest
# rm 1
# ls
haha hoxistest

# 查看回收站文件
# rl
1 myftp1

# 恢复已删除文件
# unrm 1
[root@CESHI-CLM-10-254-4-48 test]# ls
1 haha hoxistest

# rm haha/
# rm hoxistest
# rl
haha hoxistest

# 情况回收站
# rmtrash
确定要清空回收站吗?[y/n]y
# rl


 

效果看着应该还可以吧。