Linux系统下编写类Win回收站功能
rm -rf 是一个极其危险的命令,稍不注意,就会造成不可挽回的损失。
毕竟Linux系统,不像Windows系统那样自带回收站功能,只要不清空回收站,都可以恢复。
首先创建回收站目录,且赋予权限
注意你分区空间的情况,回收站的位置,生产环境下尽量放在空间较大的分区下。
我这边因为是测试,所以放在了 /root 下
[root@1206 ~]# mkdir .trash
[root@1206 ~]# chmod 777 .trash
编辑系统配置文件
[root@1206 ~]# vim .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
#回收站功能编写
# rm transform
function rm() {
# 定期清理回收站,时间可调整
dir=$(ls /root/.trash/)
#遍历目录下的内容,存入dir
now=$(date +%s)
#获取当前时间,按秒计算
for d in $dir
#取上面的$dir内容循环,也就是/root/.trash/目录下的内容
do
dir_time=$(stat -c %Y /root/.trash/$d)
#stat指令,文件/文件系统的详细信息显示
#stat -c %Y
# -c : 自定义输出格式,结尾有换行
# %Y : 最后修改时间(内容改变)
dir_times=$((now - dir_time))
# 如果大于等于7*24*60*60=604800,也就是一周前的目录,删除
if [[ $dir_times -gt 60 ]] ;then
#这里为了方便测试,超时时间设置为1分钟
echo "目录:" $d " 超过设定时效,已删除 "
/bin/rm -rf /root/.trash/$d
fi
done
# 重写rm命令,将文件mv到回收站下
date=$(date +%Y%m%d%H_%M)
#自定义时间格式,我用的格式是 年月日时_分,主要是为了测试方便,所以加了时_分
mkdir -p /root/.trash/$date
#创建[回收站]内移除文件时间的目录
if [[ -z $1 ]] ;then
#判断字符串是否为空
echo '请输入您要移入回收站的文件'
return
fi
echo "文件:" ${!#} " 已被移入回收站"
mv ${!#} /root/.trash/$date
#移入回收站
}
使配置文件生效
[root@1206 ~]# source ~/.bashrc
创建测试回收站需要的文件
[root@1206 ~]# touch 1.txt
[root@1206 ~]# touch 2.txt
[root@1206 ~]# touch 3.txt
[root@1206 ~]# touch 4.txt
[root@1206 ~]# touch 5.txt
[root@1206 ~]# touch 6.txt
删除文件并查看当前系统时间
[root@1206 ~]# rm -rf 1.txt
文件: 1.txt 已被移入回收站
[root@1206 ~]# date
2021年 05月 19日 星期三 11:08:32 CST
[root@1206 ~]# ll .trash/
总用量 4
drwxr-xr-x 2 root root 4096 5月 19 11:08 2021051911_08
删除文件并查看当前系统时间
[root@1206 ~]# rm -rf 2.txt
文件: 2.txt 已被移入回收站
[root@1206 ~]# date
2021年 05月 19日 星期三 11:09:13 CST
[root@1206 ~]# ll .trash/
总用量 8
drwxr-xr-x 2 root root 4096 5月 19 11:08 2021051911_08
drwxr-xr-x 2 root root 4096 5月 19 11:09 2021051911_09
删除文件并查看当前系统时间
[root@1206 ~]# rm -rf 3.txt
目录: 2021051911_08 超过设定时效,已删除
文件: 3.txt 已被移入回收站
[root@1206 ~]# date
2021年 05月 19日 星期三 11:09:50 CST
[root@1206 ~]# ll .trash/
总用量 4
drwxr-xr-x 2 root root 4096 5月 19 11:09 2021051911_09
真正的删除命令
/bin/rm -rf
后记
这样,我们的回收站自动清理功能,就完成了,当然,这样的“自动清理”还是不够智能,如果想要真正的自动清理回收站功能,可以写一条定时任务,定期执行 /bin/rm -rf 清理.trash/即可