Bash脚本实现按日期删除Linux日志文件

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

在linux的目录下,每天都会生成”log_20240606_1”、“log_20240606_2”、“log_20240607_1”,这样以“log_日期_编号”构成文件名的日志文件。需要用bash写一个脚本,设置一个日志留存日期的变量,每次运行脚本时需要按照变量,删除指定日期及以前的日志

回答:

可以使用Bash脚本来实现这个需求。以下是一个示例脚本,它会删除指定日期及以前的日志文件。假设你将这个脚本命名为cleanup_logs.sh

#!/bin/bash

# 设置日志留存日期的变量,格式为YYYYMMDD
RETENTION_DATE="20240607"

# 获取当前目录下的所有日志文件
LOG_FILES=$(ls log_*)

# 遍历所有日志文件
for FILE in $LOG_FILES; do
    # 提取文件名中的日期部分
    FILE_DATE=$(echo $FILE | awk -F'_' '{print $2}')
    
    # 比较文件日期和留存日期
    if [[ $FILE_DATE -le $RETENTION_DATE ]]; then
        echo "Deleting $FILE"
        rm $FILE
    fi
done

使用说明

  1. 将上述脚本内容保存到一个文件中,例如cleanup_logs.sh
  2. 给脚本添加执行权限:
    chmod +x cleanup_logs.sh
    
  3. 运行脚本:
    ./cleanup_logs.sh
    

解释

  • RETENTION_DATE 变量设置为你希望保留的最早日期,格式为YYYYMMDD
  • LOG_FILES 变量获取当前目录下所有以log_开头的文件。
  • 使用for循环遍历每个日志文件。
  • 使用awk命令提取文件名中的日期部分。
  • 使用if语句比较文件日期和留存日期,如果文件日期小于或等于留存日期,则删除该文件。

你可以根据需要修改RETENTION_DATE的值来调整日志文件的保留策略。