find命令用-mmin可分钟级精准查找最近修改文件,-mmin-5查5分钟内、-mmin0查当前时刻写入文件;-mtime-1查24小时内,-mtime+1查超48小时;locate因数据库延迟且无时间戳不适用于“最近修改”场景。

直接用 find 配合 -mmin 或 -mtime 就能准确定位,不用装新工具、不依赖数据库,结果实时可靠。
按分钟级精度找:用 -mmin 最准
排查刚出的问题时,“最近”往往指几分钟内。此时 -mtime 的 24 小时粒度太粗,-mmin 才是真·实时:
-
-mmin -5:5 分钟内修改过的文件(注意是负号) -
-mmin 0:严格指“恰好 0 分钟前”,即当前时刻正在被写入或刚完成写入的文件(极少见,慎用) -
-mmin +60:60 分钟前修改、但不到 61 分钟——适合排除“刚动过”的干扰项
示例:查 /etc/nginx 下 10 分钟内改过的配置文件:find /etc/nginx -type f -name "*.conf" -mmin -10
按天级范围筛选:-mtime 的三种写法别混用
-mtime 看似简单,但 -1、0、+1 含义完全不同,错一个就漏掉关键文件:
-
-mtime -1:过去 24 小时内(含当前小时),最常用 -
-mtime 0:等价于-mtime -1,不是“今天零点起”,而是“从现在往前推 24 小时” -
-mtime +1:超过 48 小时(即 >2 天),不是“1 天前”
常见误判:以为 -mtime 1 是“昨天”,实际它匹配的是“距今 24~48 小时之间”的文件;若要查“昨天全天”(比如 2026-09-07 00:00~23:59),得用 stat 配合 grep:find /var/log -type f -exec stat --format '%y %n' {} \; | grep '2026-09-07'
为什么不用 locate 查“最近修改”?
locate 查得快,但它的数据库默认每天只更新一次(通常在凌晨),updatedb 也不保证立刻生效。这意味着:
- 你刚
touch了一个文件,locate很可能查不到 - 即使刚运行过
sudo updatedb,它也只记录文件路径,不记录时间戳,无法做“最近 X 分钟”过滤 - 它适合“有没有叫 nginx.conf 的文件”,不适合“哪个 nginx.conf 刚被改过”
所以只要目标是“最近修改”,locate 就不该出现在命令行里。
容易忽略的权限与遍历限制
执行 find 时卡住、没结果、报 Permission denied,往往不是命令写错,而是路径权限或递归深度问题:
- 加
2>/dev/null屏蔽错误输出,避免干扰结果(但别一上来就加,先看报错再决定) - 用
-maxdepth 1限制只查当前层,避免陷入/proc、/sys这类虚拟文件系统卡死 -
-type f必须显式加上,否则find会把目录也当作“匹配项”返回,导致后续操作出错
安全建议:删文件前,先用 -print 看匹配列表,例如:find /tmp -name "*.log" -mmin -30 -print —— 确认无误后再换 -delete。


















