发布于2026-08-07 阅读(0)
扫一扫,手机访问
-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(含)及更早。
-mtime 7(即修改时间落在 2026-07-01 00:00:00 ~ 2026-07-01 23:59:59 区间)-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 就只认这个伪造值。
上一篇:Linux怎么查看共享内存大小
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9