我的目录中至少有 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[@]}"
因此,这一次只能处理一个给定日期。