实现Linux系统的回收站
The following article is from 秦露露 Author cnLinuxer
Linux系统默认没有回收站功能,使用rm命令进行删除操作,文件就会直接从系统中删除,很难恢复。
今天我们利用简单的shell脚本实现Linux系统下的回收站机制。
先提供脚本代码
[root@qll251 ~]# vim /bin/delete
1 #! /bin/bash
2 [ ! -d /.recycle ] && mkdir -v /.recycle && chmod 777 /.recycle
3
4 if [ $# -eq 0 ]; then
5 echo "Usage: delete file1 [file2 file3...]" && exit 6
6 fi
7
8 read -p "Are you sure you want to delete it? [Y/N]: " action
9 case $action in
10 y) ;;
11 Y) ;;
12 *) exit
13 esac
14
15 for file in $@; do
16 now=`date +%Y-%m-%d-%H:%M:%S`
17 newfile=`basename $file`
18 mv $file /.recycle/$newfile.$now && echo "$file is deleted!"
19 done
一、脚本解释
1)在/bin
目录下创建脚本文件delete
(方便系统用户直接调用delete命令)
2)首先判断回收站文件夹是否创建;如未创建,则创建/.recyscle
;同时设置权限777
[ ! -d /.recycle ] && mkdir -v /.recycle && chmod 777 /.recycle
3)判断输入的文件个数是否为0;如果返回为真,则打印帮助信息,同时退出该脚本
if [ $# -eq 0 ]; then
echo "Usage: delete file1 [file2 file3...]" && exit 6
fi
4)设置用户交互,这里类似Windows的弹窗提醒
(将用户的输入,放入action
变量)
read -p "Are you sure you want to delete it? [Y/N]: " action
5)理解为:若用户回答yes,继续执行脚本;否则直接退出程序
case $action in
y) ;;
Y) ;;
*) exit
esac
6) 将目标文件根据当前时间重命名,同时移动到/.recycle
命令解释:
$@:传给脚本的所有参数(这里表示所有待删除的文件)
basename:去掉路径信息,返回纯粹的文件名
for file in $@; do
now=`date +%Y-%m-%d-%H:%M:%S`
newfile=`basename $file`
mv $file /.recycle/$newfile.$now && echo "$file is deleted!"
done
二、设置脚本可执行权限
[root@qll251 ~]# chmod +x /bin/delete
三、定时清空回收站
执行crontab -e
,设置每周执行清空回收站动作
0 0 * * 0 rm -rf /.recycle
四、进行测试
如果delete命令用着不习惯,我们也可以给rm配置别名。将rm命令替换为delete
以下是具体实现方法:
编辑~/.bashrc
文件,增加一行
alias rm='sh /bin/delete'
执行source ~/.bashrc
使替换立即生效
后台回复“加群”,带你进入高手如云交流群
推荐阅读:
调度系统设计精要
喜欢,就给我一个“在看”
10T 技术资源大放送!包括但不限于:云计算、虚拟化、微服务、大数据、网络、Linux、Docker、Kubernetes、Python、Go、C/C++、Shell、PPT 等。在公众号内回复「1024」,即可免费获取!!