Shell脚本具有保留期的tar特定文件

时间:2016-02-25 15:24:02

标签: bash shell

我是Unix Shell脚本的新手。我需要将文件保留一个月的保留期并归档其他文件。

示例:

文件格式:WE20160225.log(20160225 YYYYMMDD)

在目录/ oracle / Sales中说有3个文件:

WE20160130.log

WE20151201.log

WE20151109.log

我需要tar.gz WE20151201.log和WE20151109.log

但不是WE20160130.log,因为该文件距离现在还不到一个月。我怎样才能做到这一点? (可能需要对文件名进行子串)

我可以更改目录,但不知道接下来该做什么。我的逻辑是循环遍历文件并从文件中对日期进行子字符串并检查当前日期

我需要使用文件名日期,而不是文件修改日期。

SALES_DIR="/oracle/sales/"
cd $SALES_DIR

2 个答案:

答案 0 :(得分:2)

可能是这样的:

list=`ls *.log`

limit=`date --date 'Last Month' +%Y%m%d`

for filename in $list
  do
    if [ ${filename:2:8} -lt $limit ]
      then
        tar -czf "$filename.tar.gz" $filename
      fi
  done;

答案 1 :(得分:2)

您可以使用此for循环:

curr=$(date '+%s')
for file in WE*.log; do
   f="${file%.*}"
   ts=$(date -d "${f:2}" '+%s')
   (( (curr - ts) > 30*86400 )) && echo "$file"
done | tar cvzf backup.tgz -T-

基本上我们以unix秒获取当前日期时间,然后从文件中提取日期并使用date找到它的EPOCH(unix ts)值。

最后,我们将2个时间戳的差异与30*86400(30天)进行比较并打印文件名。整个事情通过管道传递给tar命令来创建tar压缩文件。