![如何压缩 7 天前的 zip 目录](https://linux22.com/image/133423/%E5%A6%82%E4%BD%95%E5%8E%8B%E7%BC%A9%207%20%E5%A4%A9%E5%89%8D%E7%9A%84%20zip%20%E7%9B%AE%E5%BD%95.png)
我有一个文件夹,其中存储了很多 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
用于创建 tarz
用于 gz 压缩v
对于详细的f
对于文件
所以基本上如果 find 得到两个结果:20180501
和20180502
。然后它将传入{}
并创建两个归档 tar 文件:
20180501.tar.gz
和20180502.tar.gz