给rm设置回收站
在LINUX上使用rm是删除文件的,但rm也是危险的,使用不当就会造成不可估量的影响,例如:rm -rf /*(虽然可以使用debugfs进行恢复,不过这个就要靠运气了)。在rm操作时,我们可以像windows上一样,给rm加上一个移到回收站的功能。
一、myrm脚本
因为exit会使得子shell退出,如果将此脚本写成一个函数放到.bashrc的话,中间一旦出错就会导致终端窗口关闭。故单独写一个脚本。脚本内容如下:
1#!/bin/bash
2TRASH=/tmp/bak
3set -e #Exit immediately if any untested command fails in non-interactive mode.
4if [[ $1 =~ ^-[^rf] ]]; then
5 echo "usage: rm [-rf] files"
6 exit 1
7fi
8if [ $# == 0 ]; then
9 echo "usage: rm [-rf] files"
10 exit 2
11fi
12mkdir -p $TRASH
13#echo rm $@
14if [[ $1 =~ ^-[rf]|^-rf$ ]]; then
15 for (( i=2;i<=$#;i++ )); do
16 eval file="\${$i}"
17 #echo "$file => $TRASH"
18 mv "$file" $TRASH
19 done
20else
21 for (( i=1;i<=$#;i++ )); do
22 eval file="\${$i}"
23 #echo "$file => $TRASH"
24 mv "$file" $TRASH
25 done
26fi
如果想删除的时候有相关提示,可以把上面的注释功能去掉。因为脚本使用的模糊匹配,所以针对rm *, rm -rf *, rm -f *, rm -r等危险的行为都是有效的。$file 之所以用”” 包围,是考虑到文件名含有空格的情况。
将以上脚本放置到path路径里,并给其可执行权限,完成后,可以直接执行myrm命令,如果能正常找到,证明脚本放的位置是对的。(当然也可以使用其他路径,使用其他路径的时候,在alias调用里就需要写全路径)
二、配置~/.bashrc文件
1alias rm=myrm
2myclear(){
3 ls ~/trash
4 if [ $? -eq 0 ]; then
5 read -p "Do you want to clear all files in ~/trash (yes/no): " var
6 if [ $var = "yes" ]; then
7 \rm -rf ~/trash/*
8 elif [ $var = "no" ]; then
9 echo "nothing to do"
10 fi
11 fi
12}
在这之后,可放心使用rm,并可用myclear定期清空自己的~/trash回收站。
这种方法仅在终端中敲命令有效,对于自己编写的脚本,rm还是原来的rm。如果想要对于终端里使用的rm也可以进行备份的话,就把myrm改为rm,存放到原来rm的位置,把rm命令修改为rrm或其他,将把原myrm脚本中的rm命令都改为rrm即可。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/rm-trash/5884.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.