在bash脚本中每周创建文件的tarball

时间:2015-01-22 02:58:48

标签: bash tar

我的目录格式为/var/log/2015-03-01/192.168.56.101_SW1002 每周需要将2015-XX-XX目录放入tarball中。 我到目前为止的脚本逻辑是:

if (-mtime % 7 == 0) && (file extension != .tar)
{

tar -xvvcf /var/log/(most recent date).tar `grep -v *.tar`

}

如何将此逻辑转换为bash脚本?

感谢。

1 个答案:

答案 0 :(得分:0)

我可能会设置一个计数器并循环一系列日期,存档最近完成的一周。例如:

#!/bin/sh

LOGDIR='.'
DATECMD='gdate'
WEEKENDING='Sunday'

ENDDATE=`$DATECMD -d "last $WEEKENDING" +%Y-%m-%d`
STARTDATE=`$DATECMD -d "$ENDDATE -6 days" +%Y-%m-%d`
OFN="week_ending_$ENDDATE.tar"

if [ ! -f "$OFN" ]; then
    for i in `seq 0 6`; do
        LOOPDATE=`$DATECMD -d "$STARTDATE +$i days" +%Y-%m-%d`
        if [ -d $LOGDIR/$LOOPDATE ]; then
            if [ -f "$OFN" ]; then
                tar rvf "$OFN" "$LOGDIR/$LOOPDATE/"
            else
                tar cvf "$OFN" "$LOGDIR/$LOOPDATE/"
            fi
        fi
    done
fi

上一个脚本可以在前一周关闭日期之后的一周内的任何时间毫无问题地运行。在GNU系统上,将DATECMD设置为' date'。

注意,你的tar命令很棘手。您不能同时创建(-c)提取(-x)和归档。