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

如何在Linux脚本中保留Example.log最近14天的日志?

保留日志最近14天内容的脚本实现

核心思路

先计算出14天前的日期作为阈值,逐行读取日志并提取每行日期,仅保留日期晚于(或等于)阈值的行。

具体命令与脚本实现

1. 计算14天前的阈值日期

用date命令生成和日志格式一致的日期字符串:

threshold=$(date -d "-14 days" +%Y-%m-%d)

该命令会输出类似2024-03-11的结果(以当前日期2024-03-25为例),并赋值给变量threshold。

2. 用awk过滤日志

无需额外cut命令,awk可直接提取日期并完成比较:

awk -v threshold="$threshold" '{
    # 提取日志行中的日期:从第2个字符开始取10位,即[YYYY-MM-DD里的YYYY-MM-DD
    log_date = substr($0, 2, 10)
    # YYYY-MM-DD格式的字符串可直接按字典序比较,保留符合条件的行
    if (log_date >= threshold) print $0
}' Example.log > filtered.log

执行后,filtered.log中即为最近14天的日志内容。

3. 替换原日志(可选)

确认过滤结果无误后,可将过滤后的文件替换原日志:

mv filtered.log Example.log

整合为test.sh脚本

把上述命令整合成完整可执行脚本:

#!/bin/bash

# 计算14天前的日期阈值
threshold=$(date -d "-14 days" +%Y-%m-%d)

# 过滤日志到临时文件
awk -v threshold="$threshold" '{
    log_date = substr($0, 2, 10)
    if (log_date >= threshold) print $0
}' Example.log > temp.log

# 替换原日志
mv temp.log Example.log

echo "日志已更新,仅保留最近14天内容"

给脚本添加执行权限:chmod +x test.sh,运行./test.sh即可完成操作。

补充说明

  • awk的substr函数直接从字符串提取指定部分,比单独用cut更高效简洁。
  • YYYY-MM-DD格式的字符串字典序与时间顺序一致,直接用>=即可准确判断日期是否在阈值范围内。
  • 先输出到临时文件再替换原日志,可避免误删有效内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:35:08