日志清理脚本模板
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" ]; thenecho "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扩展,允许指定目标目录,使命令更清晰