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

Bash 具有保留期的Shell脚本tar特定文件,bash,shell,Bash,Shell,我不熟悉unixshell脚本。我需要保留一个月的文件保留期和存档其他 例如: 文件格式:WE20160225.log 20160225 YYYYMMDD 假设目录/oracle/Sales中有3个文件: WE20160130.log WE20151201.log WE20151109.log 我需要对WE20151201.log和WE20151109.log进行tar.gz 但不是WE20160130.log,因为该文件距离现在不到一个月。我该怎么做?可能需要为文件名添加子字符串 我可以更改目

我不熟悉unixshell脚本。我需要保留一个月的文件保留期和存档其他

例如:

文件格式:WE20160225.log 20160225 YYYYMMDD

假设目录/oracle/Sales中有3个文件:

WE20160130.log

WE20151201.log

WE20151109.log

我需要对WE20151201.log和WE20151109.log进行tar.gz

但不是WE20160130.log,因为该文件距离现在不到一个月。我该怎么做?可能需要为文件名添加子字符串

我可以更改目录,但不知道下一步该怎么办。我的逻辑是在文件中循环并从文件中选择日期子字符串,然后检查当前日期

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


大概是这样的:

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;

大概是这样的:

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;
您可以将此用于循环:

基本上,我们以unix秒为单位获取当前日期时间,然后从文件中提取日期,并使用date查找它的值

最后,我们将比较两个时间戳与30*86400 30天的差异,并打印文件名。整个过程通过管道传输到tar命令来创建tar压缩文件。

您可以将此用于循环:

基本上,我们以unix秒为单位获取当前日期时间,然后从文件中提取日期,并使用date查找它的值


最后,我们将比较两个时间戳与30*86400 30天的差异,并打印文件名。整个过程通过管道传输到tar命令来创建tar压缩文件。

使用-T选项,tar可以从文件中读取源文件名,-T-使其从STDIN读取,因为我们正在for循环中打印文件名。哦,你是说通过管道传输匹配的整个过程文件名,然后从STDIN获取整个过程,然后再从tar.gz获取它?没错,您可以看到,我正在使用| tar cvzf backup.tgz-T-after done。这使得tar从for循环读取所有源文件好的,我不知道我可以通过管道从for循环读取整个输出,谢谢…:使用-T选项,tar可以从文件中读取源文件名,并且-T-使其从STDIN读取,因为我们正在for loop中打印文件名。哦,你是说你通过管道传输匹配的整个内容文件名,然后我们从STDIN获取整个内容,然后再从tar.gz获取它?没错,你可以看到我在完成后使用了| tar cvzf backup.tgz-T。这使得tar从for循环读取所有源文件好的,我不知道我可以通过管道从for循环读取整个输出,谢谢…:您的脚本将生成2 tar.gz文件,但我只需要1 tar.gz,谢谢。您的脚本将生成2 tar.gz文件,但我只需要1 tar.gz,谢谢
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-