免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6976 | 回复: 10
打印 上一主题 下一主题

压缩日志文件的脚本(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-10 16:44 |只看该作者 |倒序浏览
有日志文件如下
2009_08_02-18_03_41.net.log   2009_08_27-10_05_59.net.log
2009_08_05-00_00_00.game.log  2009_08_27-18_25_01.game.log
2009_08_06-00_00_00.game.log  2009_08_27-18_25_01.net.log
2009_08_06-09_15_56.game.log  2009_08_28-00_00_00.game.log
2009_08_06-09_15_56.net.log   2009_08_29-00_00_00.game.log
2009_08_06-09_35_10.game.log  2009_08_30-00_00_00.game.log
2009_08_06-09_35_10.net.log   2009_08_31-00_00_00.game.log
2009_08_07-00_00_00.game.log  2009_09_01-00_00_00.game.log
2009_08_08-00_00_00.game.log  2009_09_02-00_00_00.game.log
2009_08_09-00_00_00.game.log  2009_09_03-00_00_00.game.log
2009_08_10-00_00_00.game.log  2009_09_03-09_35_21.game.log
2009_08_11-00_00_00.game.log  2009_09_03-09_35_21.net.log
2009_08_12-00_00_00.game.log  2009_09_03-09_42_42.game.log
2009_08_13-00_00_00.game.log  2009_09_03-09_42_42.net.log
2009_08_13-09_18_43.game.log  2009_09_04-00_00_00.game.log
2009_08_13-09_18_43.net.log   2009_09_05-00_00_00.game.log
2009_08_13-09_29_09.game.log  2009_09_06-00_00_00.game.log
2009_08_13-09_29_09.net.log   2009_09_07-00_00_00.game.log
2009_08_13-18_05_35.game.log  2009_09_08-00_00_00.game.log
2009_08_13-18_05_35.net.log   2009_09_09-00_00_00.game.log
2009_08_14-00_00_00.game.log  2009_09_10-00_00_00.game.log
2009_08_15-00_00_00.game.log  2009_09_10-09_19_15.game.log
2009_08_16-00_00_00.game.log  2009_09_10-09_19_15.net.log
2009_08_17-00_00_00.game.log  2009_09_10-09_20_29.game.log
2009_08_18-00_00_00.game.log  2009_09_10-09_20_29.net.log
2009_08_19-00_00_00.game.log  2009_09_10-09_21_19.game.log
2009_08_20-00_00_00.game.log  2009_09_10-09_21_19.net.log
2009_08_20-09_08_37.game.log  2009_09_10-09_23_12.game.log
2009_08_20-09_08_37.net.log   2009_09_10-09_23_12.net.log
2009_08_20-09_27_37.game.log  2009_09_10-09_27_40.game.log
2009_08_20-09_27_37.net.log   2009_09_10-09_27_40.net.log
2009_08_21-00_00_00.game.log  2009_09_10-09_29_34.game.log
2009_08_21-14_54_05.game.log  2009_09_10-09_29_34.net.log
2009_08_21-14_54_05.net.log   2009_09_10-09_29_59.game.log
2009_08_21-15_27_12.game.log  2009_09_10-09_29_59.net.log
2009_08_21-15_27_12.net.log   2009_09_10-09_33_18.game.log
2009_08_22-00_00_00.game.log  2009_09_10-09_33_18.net.log
2009_08_23-00_00_00.game.log  2009_09_10-09_33_52.game.log
2009_08_24-00_00_00.game.log  2009_09_10-09_33_52.net.log
2009_08_25-00_00_00.game.log  2009_09_10-09_34_55.game.log
2009_08_26-00_00_00.game.log  2009_09_10-09_34_55.net.log
2009_08_27-00_00_00.game.log  2009_09_10-09_43_12.game.log
2009_08_27-09_15_35.game.log  2009_09_10-09_43_12.net.log
2009_08_27-09_15_35.net.log   2009_09_10-09_58_21.game.log
2009_08_27-09_26_40.game.log  2009_09_10-09_58_21.net.log
2009_08_27-09_26_40.net.log   2009_09_10-10_05_58.game.log
2009_08_27-09_43_49.game.log  2009_09_10-10_05_58.net.log
我想把今天日期以前的所有日志压缩,并且压缩完以后删掉原文件,同一天的日志压缩在同一个文件中。
脚本我自己写了一个,不过当时写的是删除上个月的,相当的乱,而且现在日志越来越大,必须每天压缩了
咱们这里高手多,肯定有比我想的好的 帮我想想吧

[ 本帖最后由 Lx308033262 于 2009-9-11 09:27 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-09-10 17:24 |只看该作者
  1. #!/bin/bash
  2. rm -f *.list
  3. ls *.log | awk -F "_|-" '{print $0>>$1$2$3".list"}'
  4. for l in *.list
  5. do
  6.   day=${l%%.*}
  7.   [ $day -lt `date +%Y%m%d` ] && tar -T $l -czvf $day.tar.gz --remove-files
  8. done
  9. rm -f *.list
复制代码

[ 本帖最后由 ywlscpl 于 2009-9-10 17:46 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-09-10 18:06 |只看该作者
for i in `find . ! -name "$(date +%Y_%m_%d)*" `
do
tar -zcvf $i.tgz $i --remove-files
done

论坛徽章:
0
4 [报告]
发表于 2009-09-10 18:16 |只看该作者

回复 #3 lucash 的帖子

需要:同一天的日志压缩在同一个文件中

论坛徽章:
0
5 [报告]
发表于 2009-09-11 08:32 |只看该作者
for i in `find . ! -name "$(date +%Y_%m_%d)*" ! -name "*tgz"`
do
tar -zcvf ${i%%-*}.tgz ${i%%-*} --remove-files
done

[ 本帖最后由 lucash 于 2009-9-11 09:03 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-09-11 08:51 |只看该作者

  1. [ -d backup ] || mkdir backup  #创建备份目录
  2. for file in *.log
  3. do
  4.   [ $file \< $(date +%Y_%m_%d) ] || continue   # 如果是今天的日志,就跳过不处理
  5.   tar -rf "${file%%-*}.tar" "$file" && mv "$file" backup/  #把日志文件打包,包文件名是日志文件的日期(文件名中-之前的就是日期),如果成功,就把文件移动到backup目录下
  6. done
  7. for file in *.tar
  8. do
  9.    gzip "$file"  #压缩所有的包文件
  10. done

  11. #现在,所有备份过的文件都保存在backup目录下,如果不需要的话,可以删除
复制代码

论坛徽章:
0
7 [报告]
发表于 2009-09-11 09:24 |只看该作者

回复 #5 lucash 的帖子

这个把好像当前文件夹得所有文件都打包了

论坛徽章:
0
8 [报告]
发表于 2009-09-11 09:25 |只看该作者

回复 #2 ywlscpl 的帖子

这个可以 谢谢 我再把文件名的格式改改

论坛徽章:
0
9 [报告]
发表于 2009-09-11 09:27 |只看该作者

回复 #6 springwind426 的帖子

谢谢  
[ $file \< $(date +%Y_%m_%d) ] 这个是怎么判断的 拿文件名和日期做对比?

[ 本帖最后由 Lx308033262 于 2009-9-11 17:10 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-09-11 09:47 |只看该作者
logger="/home/Austin/shell/log"
backup="/home/Austin/shell/backup"

ls -l $logger | awk '
BEGIN {
        year=strftime("%Y")
        month=strftime("%m")
        date=strftime("%d")
        all_date=year"_"month"_"date
}
$9 !~ all_date{
        split($9,name,"-")
        system("tar -czvf "backup"/"name[1]".tar "logger"/"name[1]"*")
}
' logger=$logger backup=$backup

最近在练awk所以都用awk实现。
这个脚本可以进化下,以月份作为目录来保存压缩日志。修改system就可以了

[ 本帖最后由 恋家的老鼠 于 2009-9-11 09:49 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP