批量删除文件脚本

自己的ECS上挂了一些备份数据库、日志、配置文件、/var/www目录等备份脚本,时间一长备份目录下的东西就多了。今天闲下来写个脚本自己批量删除下(别跟我说怎么不在备份脚本里加删除操作的,就是任性)

一言不合上代码

例如:需要删除目录DIR为/home/root/backup/下,格式为MySQL-2017-07-21.sql的数据库备份文件。则需要正则为^MySQL-[0-9]{4}(-[0-9]{2}){2}.sql$(其实要写严谨的话老长了)。截取日期的前缀–即在日期前的一个或多个字符(),同理后缀也一样,如上代码中的。

只是练练手,查缺补漏。(菜鸟一枚,shell平时不怎么练手,一到写脚本各种查资料)下面是知识点总结:

1、${NAME#*PREFIX}的作用是截取从左开始PREFIX第一次出现后位置的字符串,如URL=”http://www.baidu.com”;${URL#*//} 则是”www.baidu.com”。所以若Docker-ghost-2017-07-24.log这样的截取日期的话,采用PREFIX为 – 的话则会截取到错误的ghost-,此时可加长PREFIX为ghost-或t-

2、同上很相似,${NAME%SUFFIX*}的作用是截取从右开始SUFFIX第一次出现前位置的字符串,如URL=”http://www.baidu.com”;${URL%//*} 则是”http”。然后需要注意的也同上理推。

3、简单又实用一点 。for FILE in /home/root/* 或 ls /home/root ,这样可以遍历目录下的文件和目录,再通过 if test -f $FILE 判断是否为文件。

4、if [[   ]]其实也是一种判断方法 ,和if [  ]容易混淆。但是if [[  ]]中[[ 是shell的关键字,在bash、ksh等支持,且能够防止脚本中的许多逻辑错误。在其中可以使用 =~进行正则匹配,也可以使用在if [ ]中不能使用&&、||、>=等。这里搬来一张图做对比:

5、时间差计算:date +%s获取当前时间戳,date +%s -d $DATE 获取给点日期时间戳。相减就是相差的时间,单位为秒。此外date 命令功能很强大,出了给出时间戳和给出格式化时间 date %Y-%m-%d 外,也可以获得上一或多天、上礼拜X、多天前、多个星期前、上个月等等。

6、另外不得不说的就是在shell中${ }、$[ ] 、$(( ))、 $( ) 的使用区别,[[    ]]、 [ ]、  ( )、((  ))、{ }的使用区别。有时候也是蛮让人容易混淆的。需要额外提的两个是 ${ }:用来应直接变量也包括环境变量等(当然我们上面的截取其实也是引用过程的处理);$[ ]:可用来做基本的数值运算。

详尽的资料可以查阅这两篇博文:

shell中$(( )) 与 $( ) 还有${ }的区别

shell中if条件字符串、数字比对,[[ ]]和[ ]区别

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

%d 博主赞过: