先用logrotate定期进行日志分割
#!/bin/bash
#在 多个目录下查找所有扩展名为 .log 或者 .txt 的文件,并且文件修改时间超过 180 天(即 6 个月)的文件会被删除
find "/path/to/directory1 /path/to/directory2 /path/to/directory3" -type f \( -name "*.log" -o -name "*.txt" \) -mtime +180 -exec rm {} \;
bak_dir='/var/backups/audit' # 定义备份目录
bak_file="${bak_dir}/audit_$(date +%Y%m%d%H%M).tar.gz" # 定义备份文件名
log_files=( # 定义要备份的日志文件和目录
"/var/log/audit/audit.log"
"/var/log/messages"
"/var/log/secure"
"/etc"
)
if [ ! -d "${bak_dir}" ]; then # 如果备份目录不存在则创建
mkdir -p "${bak_dir}"
fi
tar czf "${bak_file}" "${log_files[@]}" # 打包备份文件
ls -tp "${bak_dir}" | grep -v "/$" | tail -n +6 | xargs -I {} rm "${bak_dir}/{}"
# 删除旧备份文件,保留最新的5个
# -tp :按时间排序并显示详细信息
# grep -v "/$": 过滤掉目录(只保留文件)
# tail -n +2: 从第二行开始查找(以便跳过.文件夹)
# xargs -I {}: 将找到的文件名放在{}中,并传递给rm命令
# rm "${bak_dir}/{}" :删除找到的文件