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

如何通过Shell脚本删除文件名中日期超30天的日志文件?

按文件名中的日期删除超过30天的日志文件

要实现按文件名内嵌的日期删除距今超过30天的文件,不能依赖文件修改时间,需要提取文件名中的日期进行计算。以下是具体的bash脚本解决方案:

解决方案脚本

#!/bin/bash
TARGET_DIR="/path/to/files"

# 遍历目标目录下符合命名规则的日志文件
for file in "$TARGET_DIR"/*_*_*_*.log; do
    # 处理没有匹配到文件的情况
    [ -e "$file" ] || continue

    # 从文件名中提取日期部分(格式:dd_mm_yyyy)
    date_str=$(basename "$file" .log | awk -F '_' '{print $(NF-2)"_"$(NF-1)"_"$NF)}')
    
    # 将日期转换为yyyy-mm-dd格式,确保date命令可识别
    formatted_date=$(echo "$date_str" | awk -F '_' '{print $3"-"$2"-"$1}')
    
    # 跳过日期格式无效的文件
    if ! date -d "$formatted_date" >/dev/null 2>&1; then
        echo "格式错误,跳过文件:$file"
        continue
    fi

    # 计算该日期与当前日期的天数差
    days_diff=$(( ($(date +%s) - $(date -d "$formatted_date" +%s)) / 86400 ))

    # 若天数差超过30天则删除文件(先echo测试,确认无误后启用rm)
    if [ "$days_diff" -gt 30 ]; then
        echo "将删除:$file"
        # rm "$file"  # 取消注释此行执行实际删除
    fi
done

脚本说明

  • 指定目标目录:把TARGET_DIR替换为你的日志文件实际路径
  • 提取日期:通过basename和awk拆分文件名,取倒数三个下划线分隔的字段(适配前缀含下划线的文件名)
  • 日期格式转换:将dd_mm_yyyy转为yyyy-mm-dd,这是date命令支持的标准格式
  • 有效性检查:过滤掉日期格式错误的文件,避免报错
  • 天数计算:通过时间戳差值计算天数,一天等于86400秒
  • 安全测试:先通过echo预览要删除的文件,确认无误后再取消rm的注释

注意事项

如果你的文件名日期格式是mm_dd_yyyy(月_日_年),需要修改格式转换的awk命令,把print $3"-"$2"-"$1改成print $3"-"$1"-"$2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:01:22