-mtime -7 表示查找修改时间在168小时内(从执行时刻倒推)的文件,按24小时整段向下取整,并非日历天数;需配合 -type f 和引号包裹的 -name "*.log" 使用,避免误匹配或shell展开错误。

用 -mtime -7 是最常用但容易理解错的写法
很多人看到“最近7天内”,第一反应是写 find /path -mtime -7,这没错,但得清楚它实际匹配的是“修改时间在 7×24 小时以内”的文件——不是按日历天数算,而是从命令执行时刻倒推 168 小时。比如今天是 9 月 21 日 06:23,-mtime -7 找的是 9 月 14 日 06:23 之后被改过的文件。
注意:-mtime 的单位是“24 小时整段”,且向下取整。这意味着:一个文件在 9 月 14 日 06:24 修改,它属于“7 天内”;但如果在 9 月 14 日 06:22 修改,就会被算作“7 天前”,-mtime -7 就找不到它。
- 要严格按日历日期(比如“9 月 14 日及之后”)筛选,得用
-newermt,例如:find /var/log -newermt "2026-09-14" -
-mtime -7实际等价于-mtime 0到-mtime 6的并集,不包含恰好 7 天整的那个瞬间 - 如果只想看普通文件,务必加
-type f,否则目录、链接也会被列出来,干扰判断
查日志时必须加 -name "*.log" 并用引号包裹
直接 find /var/log -mtime -7 会把所有类型条目都扫出来,包括子目录、socket 文件、甚至 .pid 文件。真正要清理或分析的,往往是 .log 或 .out 这类文件。
引号不是可选项:不加引号的 -name *.log 会被 shell 提前展开成当前目录下已有的 *.log 文件列表,再传给 find,结果完全不可控。尤其在脚本里,这种错误会导致逻辑静默失效。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 正确写法:
find /var/log -type f -name "*.log" -mtime -7 - 若需同时匹配多个后缀,用括号和
-o:find /var/log \( -name "*.log" -o -name "*.out" \) -type f -mtime -7 - 括号必须转义:
\(和\),否则 shell 报错或逻辑错乱
避免 Permission denied 刷屏,但别盲目丢掉所有 stderr
2>/dev/null 确实能让输出干净,但它也藏起了真实问题:比如你误写了不存在的路径、权限配置异常、或者某个挂载点已损坏。这些信息对排查更深层问题很关键。
更稳妥的做法是只过滤掉“无权访问目录”的提示,保留其他错误:
- 用
2>&1 | grep -v "Permission denied"(适合调试阶段) - 或用
find /path ... 2> >(grep -v "Permission denied" >&2)(高级用法,保持 stdout/stderr 分离) - 生产环境批量操作前,先加
-print或-ls看一眼实际命中的文件,再决定是否加-delete
-mtime 不是唯一时间维度,-ctime 和 -atime 很容易被忽略
修改文件内容会同时更新 mtime 和 ctime;但只改权限、属主、硬链接数,只会动 ctime。如果你在查“谁偷偷改了配置文件权限”,单靠 -mtime 就会漏掉线索。
-atime(访问时间)在大多数现代系统上默认关闭或延迟更新(如 mount 时带 relatime),所以它不稳定、不可靠,日常少用。
- 查“最近被 chmod 过的配置文件”:
find /etc -name "*.conf" -ctime -1 - 查“最近被 touch 过或内容被改过的文件”:
find /tmp -mtime -1 -o -ctime -1 - 组合多个时间条件时,记得用
\( ... \)明确分组,避免优先级陷阱

















