求助!!!批量删除,以日期命名的sql备份文件

qq_38593486 2018-05-24 11:12:52
求助!!!麻烦大家帮忙出谋划策一下,谢谢!
公司现在需要清理mysql备份目录,需要写一个shell脚本
需求:
只处理2018年以前的备份,保留2018年以后所有的备份
保留每月1号,10号,20号,30号的文件
其他的删除

备份命名规则:zrxk_db-20170508.tar.gz
...全文
286 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
骏马金龙 2018-05-24
  • 打赏
  • 举报
回复
#!/bin/bash

dir=/tmp/backup

for i in $dir/*;do
    basename=`basename $i`
    year_str=$(expr substr $basename 9 4)
    day_str=$(expr substr $basename 15 2)
    if [ "$year_str" -lt 2018 ];then
        [ "$day_str" -eq 1 -o "$day_str" -eq 10 -o "$day_str" -eq 20 -o "$day_str" -eq 30 ] || echo "you will remove these files: $i"
#       [ "$day_str" -eq 1 -o "$day_str" -eq 10 -o "$day_str" -eq 20 -o "$day_str" -eq 30 ] || rm -rf $i
    fi
done
测试下,如果echo的输出是你想要删除的文件,把上面的注释行取消注释
qq_38593486 2018-05-24
  • 打赏
  • 举报
回复
楼主在自己的测试环境下测试了一下,发现骏马金龙兄写的脚本需要php模块的支持,所以在上面做了一下小的更改。

#!/bin/bash
 
dir=/web/backup
 
for i in $dir/*;do
    year_str=$(echo ${i:20:4})
    day_str=$(echo ${i:26:2})
    if [ "$year_str" -lt 2018 ];then
        [ "$day_str" -eq 1 -o "$day_str" -eq 10 -o "$day_str" -eq 20 -o "$day_str" -eq 30 ] || echo "you will remove these files: $i"
        [ "$day_str" -eq 1 -o "$day_str" -eq 10 -o "$day_str" -eq 20 -o "$day_str" -eq 30 ] || rm -rf $i
    fi
done

qq_38593486 2018-05-24
  • 打赏
  • 举报
回复
谢谢,骏马金龙,点赞

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧