zip命令不支持按创建时间筛选打包,因其仅能设置压缩包自身mtime(-t参数),无法过滤源文件;实际需用find按mtime或-newermt预筛选,再交由zip处理。

zip 命令本身**不支持按文件创建时间(ctime)筛选打包**,它无法直接识别“特定日期之后创建的文件”。zip 只能依据文件的**修改时间(mtime)** 进行条件操作,且仅通过 -t 参数设置压缩包自身的最后修改时间,而非过滤源文件。
为什么不能用 -t 实现创建时间筛选?
-t mmddyyyy 的作用是:将生成的 zip 文件本身的最后修改时间设为指定日期,对源文件是否被包含毫无影响。它不是过滤开关,也不读取或比较源文件的创建/修改时间。
真正可行的替代方案
要实现“只打包某日期之后修改过的文件”,需借助 shell 工具预筛选文件列表,再交给 zip 处理:
- 使用 find 按修改时间(mtime)查找文件,例如打包过去7天内修改过的所有 .log 文件:
find /var/log -name "*.log" -mtime -7 -print0 | zip -0r logs_recent.zip --files-stdin - 若需精确到某日期(如 2026-07-15 之后),可用 -newermt:
find /data -type f -newermt "2026-07-15" -print0 | zip -0r data_after_july15.zip --files-stdin - 注意:Linux 文件系统通常不记录创建时间(birth time),所以“创建时间之后”在绝大多数情况下不可靠;实际可用的只有修改时间(mtime)或状态变更时间(ctime)
补充说明:ctime 和 mtime 的区别
mtime 是文件内容最后一次修改的时间,最常用也最可靠;ctime 是文件元数据(如权限、所有者)或内容最后一次变更的时间,常被误认为“创建时间”,但它不是创建时间,且会因 chmod、chown 等操作而更新。因此,依赖 ctime 做业务逻辑筛选存在风险。
不复杂但容易忽略:zip 本身无时间过滤能力,必须靠 find 预处理。

















