You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于文件名日期在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

使用步骤

  1. 将脚本保存为clean_backuplogs.sh,赋予执行权限:chmod +x clean_backuplogs.sh
  2. 重点:先执行脚本查看输出的删除命令,确认不会误删需要保留的文件夹
  3. 确认无误后,删除脚本中的echo前缀,执行实际删除操作

补充说明

  • 脚本依赖date命令的扩展功能(支持-d参数计算日期),主流Linux发行版(如CentOS、Ubuntu)默认支持
  • 若遇到日期解析问题,可根据系统调整date命令参数(比如BSD系系统的date语法不同)
  • 执行前建议备份关键数据,避免意外

内容的提问来源于stack exchange,提问作者Megu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:15:31