!/bin/bash
设置变量
LOG_DIR="/a/b/c" # 替换为实际的日志目录
ARCHIVE_DIR="/a/b/c/history_archive" # 替换为存储归档的目录
DAYS_TO_KEEP=30 # 保留日志的天数
LOG_FILE="/a/b/c/history_archive/op_record.log" # 替换为实际的日志文件路径
创建归档目录(如果不存在)
mkdir -p "$ARCHIVE_DIR"
获取当前日期
CURRENT_DATE=$(date +%Y-%m-%d)
记录开始时间
echo "[$CURRENT_DATE] 开始压缩和归档日志…" >> "$LOG_FILE"
压缩并归档日志
for dir in "$LOG_DIR"/20*; do
if [ -d "$dir" ]; then
# 获取目录名
dir_name=$(basename "$dir")
# 压缩目录 tar -zcf "$ARCHIVE_DIR/${dir_name}.tar.gz" -C "$LOG_DIR" "$dir_name" # 检查压缩是否成功 if [ $? -eq 0 ]; then echo "[$CURRENT_DATE] 已压缩并归档: $dir_name" >> "$LOG_FILE" # 删除原始日志目录 rm -rf "$dir" echo "[$CURRENT_DATE] 已删除原始日志目录: $dir_name" >> "$LOG_FILE" else echo "[$CURRENT_DATE] 压缩失败: $dir_name" >> "$LOG_FILE" fi fi
done
清理超过指定天数的归档文件
find "$ARCHIVE_DIR" -type f -name "*.tar.gz" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
echo "[$CURRENT_DATE] 已删除超过 $DAYS_TO_KEEP 天的归档文件" >> "$LOG_FILE"
记录结束时间
echo "[$CURRENT_DATE] 完成压缩和归档日志." >> "$LOG_FILE"
模糊的命令
1、命令$(basename $n)
n="/data/path-a/path-b/2024-log-dir"
COMPRESS_DIR=$(basename "$n")
echo $COMPRESS_DIR
2024-log-dir
2、tar -C目录路径
/data/abcp/access-mo-dispatch/2025-01-01
LOG_DIR="/data/abcp/access-mo-dispatch"
COMPRESS_DIR="2025-01-01"
tar -zcf "/data/abcp/access-mo-dispatch/2025_history_archive/2024-03-14_2024-log-dir.tar.gz" -C "/data/abcp/access-mo-dispatch" "2025-01-01"
归档压缩的结果
[root@k8s-node02 access-mo-dispatch]# tree
.
├── 2025-01-01
├── 2025-01-02
├── 2025-01-03
└── 2025_history_archive
└── 2024-03-14_2024-log-dir.tar.gz
4 directories, 1 file