欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-24 19:02:46
...

在log目录下有如下文件:

用shell压缩三个月及之前的文件(文件名含日期)
            
    
    博客分类: shell编程 F#CC++C# 

 

特征很明显:中间有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
 

 

相关标签: F# C C++ C#