唔如何帅气随意地使用rm -rf
Posted ___Leo___
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了唔如何帅气随意地使用rm -rf相关的知识,希望对你有一定的参考价值。
鉴于自己手残的问题,已经不止一次在服务器上误用rm -rf指令。终究是涨了点教训,利用shell脚本实现一个虚拟回收站(称之为垃圾中转站更合适)
rm -rf 的正确用法
该功能实现原理:将原本的rm指令替换为现在的cp+rm指令(也可以配合mv使用,但在使用习惯上略有不适),然后就会复制一份待删除的文件或目录放进指定的文件夹内(我们这里是使用的home目录下的.trash文件夹),并为它加上时间标签,然后再将目标文件删除。
回收站具体实现方法如下(以下操作基于Linux)
1. 首先随便找个地方新建一个shell文件,路径、名字均随意。(这里将路径设置在了“~/.basic_scipt”,命名为"trash.sh",可参考)。shell文件内容如下:
TRASH_DIR="~/.trash" #回收站所在目录!! ~~目录可更改,但后续操作记得同步更改~~
for i in $*;do
if [[ $i == *"-"* ]];then
optname+=$i" "
else
optname+=""
fi
if [[ $i == "+super" ]];then
optsuper="super"
fi
done
for i in $*;do
STAMP=`date +%y%m%d%H%M%S`
if [[ $i != *"-"* && $i != *"+super"* ]];then
filename=`basename $i`
if [[ $optsuper == "super" ]];then
rm $filename $optname
else
mkdir -p $TRASH_DIR
cp $filename $TRASH_DIR/$STAMP_$filename $optname
rm $filename $optname
fi
fi
done
2. 找到home目录下的".bashrc"文件(或".cshrc"文件,均为隐藏文件。这里用的是bashrc文件)。进入文件后编辑,随意找个位置添加一行alias
指令,内容如下:
$ vi ~/.bashrc
alias rm='sh ~/.basic_scipt/trash.sh'
此处需要注意一点,当遇到脚本执行出现语法错误时,大概率是因为设备的sh重定向到了dash,而不是指向bash。如果出现这种情况,可对上述alias指令作出如下更改。
# alias rm='bash ~/.basic_scipt/trash.sh'
如果没有找到".bashrc"文件,".cshrc"文件亦可,命令如下(bashrc和cshrc修改一个即可):
$ vi ~/.cshrc
alias rm 'sh ~/.basic_scipt/trash.sh' #注意没有等号=
3. 完成以上操作之后,记得保存并退出。然后在命令终端执行如下指令(source
),以使bashrc文件(或cshrc文件)的更改生效
$ source ~/.bashrc
或
$ source ~/.cshrc
4. 在source命令执行完之后,就已经大功告成了,可以随意找个文件删除一下试试。然后再看看"~/.trash/"路径下是不是新增了文件。如果有,那就是成功了;没有的话,那就再检查一下步骤吧。
5. 另外,如果我们想真正删除某个文件或目录时,应该怎么办呢?就比如说,想要清空我们的虚拟回收站的时候。这时候我们可以先进入到我们的回收站目录,然后执行一条带有"+super"选项的rm指令,即可真正删除目标文件。如下指令便实现了对虚拟回收站的清空。
$ cd ~/.trash
$ rm ./* -rf +super
6. 需要注意的是,该功能实现多少是有点毛病的。bug如下:参数中不能含有相对路径或绝对路径,即只能对当前路径下的文件操作,不过该bug并无大碍(水平有限,懒得修)。
7. 除上述毛病之外,暂未发现其它bug。 还发现一处BUG,就是被删除地文件中不能含有-
减号。除此之外,日常使用中和原来的rm指令选项并无太大差异,该咋用还是咋用。偶尔去清一下回收站即可。
关于回收站的清理
1. 第一种方法就是上述提到的,可以使用"+super"选项删除trash文件夹。然后我们手动地前往trash,将其清空。
2. 第二种方法就是在系统中添加定时任务,例如每周定时清空,不过由于自身权限问题,更改不了服务器定时任务,故这点暂未尝试。更多详细可去网上搜索一下。
3. 第三种方法,也是自己在用的方法(仍需手动清理,稍微简化而已)。在trash目录下新建一个Makefile文件,并输入以下最后两行内容:
$ vi ~/.trash/Makefile
clean:
@ ls | grep -v Makefile | xargs rm -rf
- 完成编辑后,保存并退出。在trash目录下使用
make clean
或make
指令即可。
$ make clean
- make指令执行后,你会发现trash目录下就会只剩下Makefile文件了。
- 即以后每次想清理回收站时,进入该目录,执行一下
make
指令(当然,即可。make clean
也可以,如果闲的没事干)
$ cd ~/.trash/
$ make
全新版本的回收站
呜啦啦乌拉、利用python实现回收站
没有上述的bug,效果很棒,欢迎尝试
如果您在实际使用中出现问题或者有更好的解决办法,欢迎留言。
以上是关于唔如何帅气随意地使用rm -rf的主要内容,如果未能解决你的问题,请参考以下文章