首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

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

2014-07-02 
用shell压缩三个月及之前的文件(文件名含日期)在log目录下有如下文件:?特征很明显:中间有8位连续数字表示

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

在log目录下有如下文件:

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

?

特征很明显:中间有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=0f=`ls log -1 -c`for name in $fdo    n=`expr "$name" : '.*\([0-9]\{8\}\).*'`    if [ "$n" != "" ] && [ "$n" -le "$m"31 ]     then        f[$index]="log/$name"    else        f[$index]=""    fi    (( index ++ ))donestr=${f[@]}if [ "${#str}" -gt 0 ]then    tar -zcvf logbak/$m.tar.gz  $strelse    echo "No files found."    exit 0fiecho "tar.gz maked, now delete old files."rm -fr $strecho "done."exit 0
?

?

热点排行