Linux内核之外的运维宇宙
Linux运维实战笔记:从系统架构到自动化运维

日志清理脚本模板

cat /data_log_back_bak/move_old_logs.sh
#!/bin/bash

# 日志源目录和备份目录

LOG_DIR="/data/logs/back"
TMP_DIR="/tmp"
BAK_DIR="/data_log_back_bak"

# 确保备份目录存在

if [ ! -d "$BAK_DIR" ]; then
  echo "Error: Backup directory $BAK_DIR does not exist."
  exit 1
fi

# 查找3个月(约90天)前修改的文件并移动(原日志目录)

find "$LOG_DIR" -type f -name "*.log" -mtime +90 -print0 | \
  xargs -0 -r mv -t "$BAK_DIR" 2>/dev/null && \
  echo "Moved files older than 3 months from $LOG_DIR to $BAK_DIR" || \
  echo "No files older than 3 months found in $LOG_DIR or move failed."

# 查找3个月(约90天)前修改的文件并移动(新增/tmp目录)

find "$TMP_DIR" -type f -mtime +90 -print0 | \
  xargs -0 -r mv -t "$BAK_DIR" 2>/dev/null && \
  echo "Moved files older than 3 months from $TMP_DIR to $BAK_DIR" || \
  echo "No files older than 3 months found in $TMP_DIR or move failed."

# 可选:记录日志

echo "$(date): Completed cleanup script." >> /var/log/move_old_logs.log

命令解释

这个命令是一个用于移动超过3个月的旧日志文件的shell脚本,我将逐步解释每个部分:

    find "$LOG_DIR":在指定的LOG_DIR目录中进行搜索
    -type f:只查找普通文件(不包括目录、链接等)
    -name "*.log":查找文件名以.log结尾的文件
    -mtime +90:查找90天前被修改的文件(+表示超过90天)
    -print0:以null字符(而不是换行符)分隔文件名,这样能正确处理文件名中包含空格或特殊字符的情况

    xargs -0:告诉xargs使用null字符作为输入分隔符(与find的-print0配合使用)
    -r:如果输入为空(即没有找到匹配的文件),则不执行命令
    mv -t "$BAK_DIR":使用mv命令的-t选项,将文件移动到指定的目标目录(-t表示指定目标目录,而不是将最后一个参数作为目标)
    "$BAK_DIR":目标目录,用于存放移动的文件
    
	2>/dev/null
    将标准错误输出重定向到/dev/null(即丢弃错误信息),避免显示可能的错误消息

 && echo "Moved files older than 3 months to $BAK_DIR"

    如果前面的命令成功执行(即成功移动了文件),则显示"Moved files older than 3 months to $BAK_DIR"消息

|| echo "No files older than 3 months found or move failed."

    如果前面的命令失败(即没有找到符合条件的文件或移动失败),则显示"No files older than 3 months found or move failed."消息


这个命令的作用是:

    在LOG_DIR目录和TMP_DIR中查找90天前被修改的.log文件
    将这些文件移动到BAK_DIR目录中
    如果成功移动了文件,显示成功消息
    如果没有找到符合条件的文件或移动失败,显示相应的错误消息

关键点说明:

    -mtime +90表示90天前修改的文件(90天=3个月)
    使用-print0和-0是为了正确处理文件名中包含空格的情况
    -t选项是mv命令的GNU扩展,允许指定目标目录,使命令更清晰

posted on 2025-09-23 10:32  一叶舟-小刀哥  阅读(7)  评论(0)    收藏  举报