如何压缩 7 天前的 zip 目录

如何压缩 7 天前的 zip 目录

我有一个文件夹,其中存储了很多 xml 文件,文件夹名称的格式为“yyyymmdd”,例如 20180515。我想要一个脚本,可以在文件夹增长 7 天时压缩此类文件夹。实际路径:/test/xml_files/yyyymmdd/*.xml。

答案1

给定目录的日期格式,您可以使用一个简单的 shell 脚本来计算截止日期,然后循环遍历所有相关目录并询问它们是否早于(小于)截止日期。

#!/bin/sh

cutoff=$(date -d "7 days ago"  +%Y%m%d)
for d in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
do
  if [ $d -lt $cutoff ] && [ ! -f "${d}".zip ]
  then
    zip -r "$d" "$d"
  fi
done

唯一的要求是一个可以计算任意日期的日期实用程序(例如 GNU 中的实用程序)。

该脚本将仅尝试压缩早于截止时间且尚无相应 zip 文件的目录。tar如果您愿意,可以替换为 gzip;只是一定要调整-f条件。

答案2

我假设给定路径中只有带有日期名称的目录。并且您需要将日期与目录名称进行比较,而不是修改或创建日期。

代码

offset_date=$(date -d "-7 day" +%s) ; for i in $(ls -1) ; do if [ $(date -d $i +%s ) -gt $offset_date ] ; then echo $i ; fi  ; done | xargs tar -czf directories.tar

说明:这里我将超过 7 天的纪元日期保存在 offset_date 变量中,并将目录名称转换为纪元后将其与目录名称进行比较。

答案3

您可以使用 find 命令来实现此目的:

find  /test/xml_files/ -type d -ctime +7 -exec tar -czvf {}.tar.gz {} \;
  • find /test/xml_files:这/test/xml_files是我们要搜索的位置
  • -type d:我们只需要查找目录(文件类型)
  • -ctime +7: 只考虑修改时间超过7天的
  • -exec tar -czvf {}.tar.gz {} \;:这基本上是tar -czvf在 find 找到的结果上执行的。
tar -czvf <output-tar-name> <input-folder-name>
  • c用于创建 tar
  • z用于 gz 压缩
  • v对于详细的
  • f对于文件

所以基本上如果 find 得到两个结果:2018050120180502。然后它将传入{}并创建两个归档 tar 文件: 20180501.tar.gz20180502.tar.gz

相关内容