不知道大家对在服务器上使用rm命令有什么感觉,反正每次我使用的时候,都会好好确认,即使这样,按下回车的时候,心里还是会有点慌慌的感觉。
因为和windows系统不一样,使用win系统默认删除文件,该文件就会被放入到回收站中,想要恢复直接从回收站找到文件并恢复即可。
但是在linux中,用rm删除文件,那就是真的删除掉了,是没有回收站这个概念的。
正因为rm命令的危险性,所以想要不自己写一个shell脚本,用来删除文件。
自己定义的这个命令删除文件时,会将原文件的位置移动“回收站”目录,然后再将原文件给删除掉。如果误删了,就可以从回收站中找到该文件并恢复。
首先,第一步,我们需要先创建回收站目录,如果已经有了此目录从不用重新创建
# 回收站目录 DEL_BAK_DIR="/root/.delbak" if [ ! -d "$DEL_BAK_DIR" ];then mkdir "$DEL_BAK_DIR" || exit 1 fi
然后我们来获取用户输入的参数,循环遍历有所参数,调用删除函数来删除。当然,我们首先需要检查用户是否输入了参数,如果用户没有输入参数那么就直接退出程序,不往下走了。
# 获取参数 if (( $# < 1 ));then echo "Usage ${0} file1 file2 ..." exit 2 fi # 删除文件 for file in $* do delete $file done
最后,我们需要编写delete这个函数了。这个函数应该有哪些功能呢?首先,它肯定能对待删除的文件名做检查,如果不是文件或目录,它就不继续往下走了。另外,每次将删除文件放到回收站目录前,应该对回收站目录所在分区剩余空间做检查,如果空间不足也不往下走。
下面是文件是否存在的检查
if [ ! -e $1 ];then echo "file $1 is not exists" exit 3 fi而关于分区空间的检查则稍微复杂些。首先,我们要获取到回收站目录所在分区剩余空间,然后获取到待删除文件的大小,拿这两个数据做对比。
# 分区剩余空间是否充足校验 part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}') file_size=$(du -ks $1 | awk '{print $1}') if (( part_free > file_size)) then # 备份且删除源文件 …… else echo "The disk size is not enough" exit 4 fi到这步,所有的准备工作都做好了,就差最后的备份源文件,然后删除源文件了。下面给出完整的代码:
#!/bin/bash # 使用自定义命令del来代替rm命令 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin export LANG=en # 回收站目录 DEL_BAK_DIR="/root/.delbak" function delete () { # 文件名是否存在校验 if [ ! -e $1 ];then echo "file $1 is not exists" exit 3 fi # 分区剩余空间是否充足校验 part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}') file_size=$(du -ks $1 | awk '{print $1}') if (( part_free > file_size)) then # 备份且删除源文件 now=$(date +%Y%m%d%H%M) if [ ! -d "$DEL_BAK_DIR/.$now" ];then mkdir "$DEL_BAK_DIR/.$now" || exit 5 fi mv -f $1 $DEL_BAK_DIR/.$now/$(basename $1) else echo "The disk size is not enough" exit 4 fi } if [ ! -d "$DEL_BAK_DIR" ];then mkdir "$DEL_BAK_DIR" || exit 1 fi # 获取参数 if (( $# < 1 ));then echo "Usage ${0} file1 file2 ..." exit 2 fi # 删除文件 for file in $* do delete $file done关于该脚本本人已经测试过,大家可以拿去放心用。该脚本支持通配符哦,比如想删除所有以.html结尾的文件,只需输入del *.html即可。
以上就是关于这次的分享,是不是感觉打开了新世界呢?获取更多资讯和教程欢迎关注编程学习网
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/7773/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取