-mtime +7 表示修改时间早于当前时刻168小时(精确到小时),非日历日期;需配合-type f和引号化-name防误匹配;严格按日期筛选应使用-newermt;分钟级精度用-mmin。

-mtime +7 表示“修改时间超过 168 小时”,不是“日历上 7 天前”。比如现在是 9 月 29 日 13:54,-mtime +7 找的是 9 月 22 日 13:54 之前修改的文件——它按整 24 小时段向下取整,不看日期,只算小时差。
为什么 -mtime +7 不等于“9 月 22 日及更早”
因为 -mtime 的计算基准是“从命令执行时刻倒推”,且以 24 小时为单位截断。一个文件在 9 月 22 日 13:55 修改,它仍属于“7 天内”(即 -mtime -7 范围);但如果在 9 月 22 日 13:53 修改,就落入 -mtime +7 ——差两分钟,结果完全不同。
若需严格按日历日期筛选(如“9 月 22 日零点起”),必须用 -newermt:
find /var/log -type f -name "*.log" -newermt "2026-09-22" ! -newermt "2026-09-23"
-
-newermt "2026-09-22":修改时间晚于该日期 00:00:00 -
! -newermt "2026-09-23":同时不晚于次日 00:00:00,即限定在当天
-mtime +7 必须搭配 -type f 和引号包裹的 -name
不加 -type f 会把目录、socket、设备文件全列出来,干扰判断;不加引号的 -name *.log 会被 shell 提前展开成当前目录下已存在的 .log 文件名,导致 find 实际搜索路径错乱。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
正确写法:
find /backup -type f -name "*.tar.gz" -mtime +7
- 多个后缀用转义括号:
find /logs \( -name "*.log" -o -name "*.out" \) -type f -mtime +7 - 生产脚本中务必加
-maxdepth 1防止递归误删子目录下的关键数据 - 删除前先加
-ls或-print看一眼实际命中的文件
别混淆 mtime、ctime 和 atime
改文件内容 → mtime 和 ctime 都变;只改权限或属主 → 只有 ctime 变;只读文件 → atime 变。备份清理通常盯 mtime,但监控配置变更就得用 -ctime +1。
分钟级精度要用 -mmin:
find /tmp -type f -mmin +10080 # 等价于 -mtime +7,但更直观
-
-mmin +10080是精确到分钟的写法,避免天数取整带来的歧义 -
-atime +7容易受noatime挂载选项影响,很多系统默认禁用atime更新
真正容易出问题的不是语法,而是时间语义理解偏差和 shell 展开失控——-mtime +7 看似简单,但一旦混进脚本、定时任务或跨时区环境,没加 -type f 和引号的命令,可能静默删掉不该动的东西。

















