Bash脚本删除logs目录下超过指定天数的日志文件

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

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

回答:

你可以编写一个Bash脚本来实现这个功能。以下是一个示例脚本,它会删除logs/目录下超过指定天数的日志文件。默认情况下,日志文件会保留3天。

#!/bin/bash

# 设置默认的日志留存天数
retention_days=3

# 如果提供了参数,则使用参数作为留存天数
if [ ! -z "$1" ]; then
  retention_days=$1
fi

# 获取当前日期
current_date=$(date +%Y%m%d)

# 计算保留日期的阈值
threshold_date=$(date -d "$current_date - $retention_days days" +%Y%m%d)

# 进入logs目录
cd logs || { echo "logs directory not found"; exit 1; }

# 遍历所有日志文件
for file in log_*; do
  # 提取文件名中的日期部分
  file_date=$(echo $file | cut -d'_' -f2)
  
  # 如果文件日期小于等于阈值日期,则删除文件
  if [ "$file_date" -le "$threshold_date" ]; then
    echo "Deleting $file"
    rm "$file"
  fi
done

echo "Log cleanup completed."

使用说明

  1. 将上述脚本保存为cleanup_logs.sh
  2. 确保脚本具有可执行权限:
    chmod +x cleanup_logs.sh
    
  3. 运行脚本:
    ./cleanup_logs.sh
    
    默认情况下,脚本会保留3天的日志文件。如果你想指定不同的留存天数,可以在运行脚本时传递一个参数。例如,要保留7天的日志文件:
    ./cleanup_logs.sh 7
    

脚本说明

  • retention_days变量设置了默认的日志留存天数。
  • current_date获取当前日期。
  • threshold_date计算出保留日期的阈值。
  • 脚本进入logs目录并遍历所有以log_开头的文件。
  • 提取文件名中的日期部分,并与阈值日期进行比较。如果文件日期小于等于阈值日期,则删除