商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Linux怎么查找7天前的文件

Linux怎么查找7天前的文件

  发布于2026-08-07 阅读(0)

扫一扫,手机访问

-mtime +7 这个参数常被误解,它实际匹配的是修改时间超过 7 个 24 小时周期的文件,也就是 8 天及以上。这意味着它会选中 2026-06-30 及更早的文件,而非简单的“7天前”。由于计算基于向下取整,它存在一个“空档期”(-mtime 7 对应的是恰好第 7 天)。因此,在执行前务必配合 -type f-name-ls 进行安全预览,对 -delete 操作保持谨慎。

Linux怎么查找7天前的文件

find 命令本身并不理解“7天前”这种精确到某一天的说法,它能做的,是按照“修改时间大于/小于 N 天”这样的规则来筛选。也就是说,这里真正对应的是「修改时间超过 7 天」的文件,也就是 -mtime +7。但要特别注意,这个条件实际匹配到的是 8 天及更早 的文件(包含 2026-06-30 及之前),并不是字面上“2026-07-01 那一天的文件”。


为什么 -mtime +7 不等于“7天前”

Linux 的 -mtime 是基于 24 小时周期向下取整计算的:
– 文件在 2026-07-01 00:00:01 修改 → 到今天(2026-07-08)已过 7 天零 1 秒 → -mtime +7 会包含它
– 文件在 2026-07-01 00:00:00 修改 → 到今天刚满 7 天 → -mtime +7 不包含(因为要求 > 7 天)
所以真正被选中的最早日期是 2026-06-30(含)及更早。

  • 想查“恰好第 7 天”的文件?用 -mtime 7(即修改时间落在 2026-07-01 00:00:00 ~ 2026-07-01 23:59:59 区间)
  • 想查“7 天内”(含今天)?用 -mtime -7
  • -mtime +7-mtime -7 是互补关系,但中间有 1 天空档(-mtime 7

如何安全预览再删除

别直接上 -delete。先确认路径、类型、命名是否准确:

  • -type f 排除目录,避免误删整个子树
  • -name "*.log"-name "backup_*.tar.gz" 锁定扩展名或前缀
  • -ls 查看权限、大小、完整路径和修改时间戳,人工核对
  • 示例:find /var/log -type f -name "*.log" -mtime +7 -ls

生产环境必须加的防护项

线上跑自动清理脚本,漏掉这几项容易删错:

  • -maxdepth 1:防止递归进子目录(比如 /backup/db/old/ 下还有 /backup/db/old/archive/
  • ! -name "latest.*":排除保留文件(如 latest.sqllatest.tar.gz
  • 路径末尾不带 /*,写成 /backup 而非 /backup/(避免 shell 展开干扰)
  • 确认当前用户对目标文件有 w 权限,否则 -delete 会静默失败

替代方案:用 -mmin 更精确控制小时级

如果需要严格限定“7×24=168 小时前”,可用分钟单位:

  • -mmin +10080(10080 = 7 × 24 × 60)
  • 注意:-mmin 精度高,但某些老旧系统或 NFS 挂载点可能不支持
  • 验证是否可用:find . -mmin +1 -ls | head -n1,看是否报错

最易忽略的一点:时间判断依赖系统本地时区,且 -mtime 基于文件的 st_mtime,不是创建时间(Linux 没有标准创建时间字段)。如果备份脚本用 touch -d "2026-06-30" file 伪造时间,那 -mtime 就只认这个伪造值。

本文转载于:https://www.php.cn/faq/2943187.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注