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

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.sql、latest.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 就只认这个伪造值。


































