用shell压缩三个月及之前的文件(文件名含日期)
程序员文章站
2022-05-24 19:02:46
...
在log目录下有如下文件:
特征很明显:中间有8位连续数字表示年月日
比如现在是2011年5月份,压缩3个月及之前的就是XXXXXXX.201102XX.log的文件
程序思路:
先用date命令加参数得出今天之前三个月的年月,比如今天是2011年5月19号,用下面这句得到201102:
date -d "3 months ago" +%Y%m
然后用ls命令将log目录下的文件名列出来赋给数组,在循环中用正则匹配出文件名中的日期:
.*\([0-9]\{8\}\).*这条正则的相关文档: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