用shell压缩三个月及之前的文件(文件名含日期)

在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
 

猜你喜欢

转载自stride.iteye.com/blog/1051755
今日推荐