唔如何帅气随意地使用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 cleanmake指令即可。
$ make clean
  • make指令执行后,你会发现trash目录下就会只剩下Makefile文件了。
  • 即以后每次想清理回收站时,进入该目录,执行一下make指令 (当然,make clean也可以,如果闲的没事干) 即可。
$ cd ~/.trash/
$ make

全新版本的回收站

呜啦啦乌拉、利用python实现回收站
没有上述的bug,效果很棒,欢迎尝试

如果您在实际使用中出现问题或者有更好的解决办法,欢迎留言。

以上是关于唔如何帅气随意地使用rm -rf的主要内容,如果未能解决你的问题,请参考以下文章

如何让用户在Android中随意绘制长画布?

rm 删除文件&文件夹

唔。。。

爬取知乎“凡尔赛语录”话题下的所有回答,我知道点开看你的很帅气,但还是没我帅

而眼前嘅烂庙里,竟然同佢哋想象中嘅决然唔同

如何在 Linux 中恢复已删除的文件-