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