新建文件:
vim tar_log.sh
按【i】写入脚本内容,按【Esc】,输入:wq保存退出编辑模式
赋予执行权限:
chmod +x tar_log.sh
脚本内容如下:
第一种:遍历指定目录下全部文件夹下的logs目录,将7天前的日志按日志名称单独压缩
缺点:每个单独压缩,效率低
#!/bin/sh
baseFolder="/opt/test";
#查找days-1 天前的日志
days=8;
cd ${baseFolder};
for dir in $(ls $baseFolder)
do
echo "文件列表:${dir}"
if [ -d ${dir} ];then
echo "遍历是否存在需要压缩日志文件......"
if [ -d ${dir}/logs ];then
echo `pwd` " 目标路径:${dir}/logs";
for log in $(find ${dir}/logs -mtime +${days} -name "*.log")
do
tar -zcvf ${log}.tar.gz ${log};
if [ $? -eq 0 ];then
echo "日志文件压缩成功!删除原日志文件......"
rm -f ${log};
if [ $? -eq 0 ];then
echo "日志文件删除成功!"
else
echo "日志文件删除失败!"
fi
else
echo "日志文件压缩失败!"
fi
done
fi
else
echo "没有日志文件需要压缩......"
fi
done
第二种:遍历指定目录下全部文件夹下的logs目录,将7天前的日志全部压缩到一个压缩文件
#!/bin/sh
#日志查找路径
baseFolder="/opt/test";
#当前时间按格式输出
LOG_TIME=`date "+%Y%m%d%H%M%S"`;
#查找days-1 天前的日志
days=8;
cd ${baseFolder};
for dir in $(ls $baseFolder)
do
echo "文件列表:${dir}"
if [ -d ${dir} ];then
echo "遍历是否存在需要压缩日志文件......"
if [ -d ${dir}/logs ];then
echo `pwd` " 目标路径:${dir}/logs";
n=`find ${dir}/logs -mtime +${days} -name "*.log" | wc -l`;
echo "待处理日志文件数:${n}";
if [ ${n} -gt 0 ];then
echo "压缩日志文件......";
tar -zcvf ${dir}/logs/${dir}${LOG_TIME}.tar.gz `find ${dir}/logs -mtime +${days} -name "*.log"`;
if [ $? -eq 0 ];then
echo "日志文件压缩成功!删除原日志文件......"
for log in $(find ${dir}/logs -mtime +${days} -name "*.log")
do
rm -f ${log};
if [ $? -eq 0 ];then
echo "日志文件删除成功!"
else
echo "日志文件删除失败!"
fi
done
else
echo "日志文件压缩失败!"
fi
else
echo "无日志需要处理!"
fi
else
echo "当前目录下无logs文件夹!"
fi
else
echo "非文件目录......"
fi
done
定时任务
crontab -e
不输出日志:
30 3 * * * /bin/sh /home/tar_log.sh >/dev/null 2>&1
crontab -e
# 每天凌晨3点30执行
30 3 * * * sh /home/tar_log.sh