如何基于文件名日期在Linux中保留指定日期备份文件夹并删除其余
实现方案
核心逻辑
从文件夹名称中提取YYYYMMDD格式的日期段,判断该日期是否属于以下三类:
- 当月1日(日期部分第7-8位为
01) - 当月15日(日期部分第7-8位为
15) - 当月最后一天(通过日期计算,判断该日期的下一天是否属于下个月)
对不符合上述条件的文件夹执行删除操作。
具体脚本实现
#!/bin/bash TARGET_DIR="/var/test/logs" # 切换目标目录,失败则退出 cd "$TARGET_DIR" || exit 1 # 遍历所有Backuplogs_开头的文件夹 for dir in Backuplogs_*; do # 跳过非目录项 [ -d "$dir" ] || continue # 提取名称中的YYYYMMDD日期段 date_str=$(echo "$dir" | sed -n 's/Backuplogs_\([0-9]\{8\}\).*/\1/p') [ -z "$date_str" ] && continue # 拆分年、月、日 year=${date_str:0:4} month=${date_str:4:2} day=${date_str:6:2} # 判断是否为1日或15日,是则跳过删除 if [ "$day" = "01" ] || [ "$day" = "15" ]; then continue fi # 判断是否为当月最后一天:计算次日的月份,若与原月份不同则是最后一天 next_day_month=$(date -d "$year-$month-$day +1 day" +%Y%m) current_month="$year$month" if [ "$next_day_month" != "$current_month" ]; then continue fi # 不符合保留条件,先echo预览删除命令,确认无误后再去掉echo echo rm -rf "$dir" # rm -rf "$dir" done
使用步骤
- 将脚本保存为
clean_backuplogs.sh,赋予执行权限:chmod +x clean_backuplogs.sh - 重点:先执行脚本查看输出的删除命令,确认不会误删需要保留的文件夹
- 确认无误后,删除脚本中的
echo前缀,执行实际删除操作
补充说明
- 脚本依赖
date命令的扩展功能(支持-d参数计算日期),主流Linux发行版(如CentOS、Ubuntu)默认支持 - 若遇到日期解析问题,可根据系统调整
date命令参数(比如BSD系系统的date语法不同) - 执行前建议备份关键数据,避免意外
内容的提问来源于stack exchange,提问作者Megu
相关产品推荐
相关产品推荐

