在log目录下有如下文件:
特征很明显:中间有8位连续数字表示年月日
比如现在是2011年5月份,压缩3个月及之前的就是XXXXXXX.201102XX.log的文件
程序思路:
先用date命令加参数得出今天之前三个月的年月,比如今天是2011年5月19号,用下面这句得到201102:
- date -d "3 months ago" +%Y%m
然后用ls命令将log目录下的文件名列出来赋给数组,在循环中用正则匹配出文件名中的日期:
这条正则的相关文档:
expr正则匹配心得1对文件名列表数组循环,在循环中检查到匹配的则给文件名左边添加“log/”,不匹配则置为空串,注意是空串不是空;
然后检查最终数组是否有可用元素,如果没有则打印提示信息,有则执行tar命令;
最后删除已使用过的文件
- echo "Please wait..."
- m=`date -d "3 months ago" +%Y%m`
- index=0
- f=`ls log -1 -c`
- for name in $f
- do
- n=`expr "$name" : '.*\([0-9]\{8\}\).*'`
- if [ "$n" != "" ] && [ "$n" -le "$m"31 ]
- then
- f[$index]="log/$name"
- else
- f[$index]=""
- fi
- (( index ++ ))
- done
-
- str=${f[@]}
- if [ "${#str}" -gt 0 ]
- then
- tar -zcvf logbak/$m.tar.gz $str
- else
- echo "No files found."
- exit 0
- fi
-
- echo "tar.gz maked, now delete old files."
-
- rm -fr $str
-
- echo "done."
- exit 0
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。