如何根据文件日期压缩文件

如何根据文件日期压缩文件

我的目录中至少有 30 个文件,其中包含过去 7 天的旧日期。现在我需要根据文件创建/修改日期来压缩它们。

例如,
4 月 7 日的 10 个文件 -- 创建 april7.zip 的 zip
4 月 8 日的 10 个文件 -- 创建 april8.zip 的 zip
4 月 9 日的 10 个文件 -- 创建 april9.zip 的 zip

答案1

通常find -mtime在这里使用起来有点困难,因为它只测试相对于当前时间点的年龄。

使用 GNU date 和 Bash,我们可以执行类似的操作,将每个文件添加到与文件日期相对应的存档中:

for f in * ; do 
    zip $(date -r "$f" +%F).zip "$f"        # 2017-04-07.zip
done

或者:

for f in * ; do
    d=$(date -r "$f" +%B%d)
    zip ${d,,}.zip "$f"                     # april07.zip
done                                        # ${var,,} is for lowercase

date只能读取修改时间。因为ctime我们需要使用stat并做更多工作来修复输出格式。)


如果由于某种原因,我们需要在处理之前获取特定日期的所有文件的列表,我们可以将它们收集到一个数组中:

files=()
date="2017-04-07"
for f in * ; do 
    [ "$(date -r "$f" +%F)" = "$date" ] && files+=("$f")
done
# do something with "${files[@]}', e.g.
# zip $date.zip "${files[@]}"

因此,这一次只能处理一个给定日期。

相关内容