查“最近修改”的文件应优先用-mmin或-mtime,因二者严格对应文件内容最后一次写入时间(st_mtime),而-ctime是元数据变更时间,与内容无关,易误判。

直接说结论:查“最近修改”的文件,优先用 -mmin 或 -mtime,别碰 -ctime——它不是“创建时间”,而是“元数据变更时间”,容易误判。
为什么 -mtime 和 -mmin 才是真·修改时间
-mtime 按天计算,-mmin 按分钟计算,两者都严格对应文件内容最后一次被写入的时间(即 st_mtime)。这是运维、日志排查、备份校验最常依赖的真实修改信号。
-
-mtime -1表示“过去 24 小时内修改过”,不是“昨天修改的” -
-mmin -15表示“过去 15 分钟内修改过”,精度高,适合监控类脚本 -
-mtime +7表示“7 天前修改的”,注意是“大于 7 天”,不是“恰好第 8 天” - 时间值带负号(
-n)= 小于 n 单位;带正号(+n)= 大于 n 单位;不带符号 = 精确等于 n 单位(极少用)
-ctime 不是创建时间,别被名字骗了
Linux 文件系统没有标准“创建时间”字段。-ctime 实际记录的是 inode 元数据(如权限、所有者、硬链接数)最后一次变更的时间。一次 chmod、chown、甚至 mv 到同分区目录,都会触发 -ctime 更新——但它和文件内容是否改动完全无关。
- 你改完配置文件后执行了
chmod 644 conf.yml,-ctime会变,-mtime不变 - 用
-ctime -1查“最近改过的配置”,可能捞出一堆只改过权限的旧文件 - 真正需要查“元数据变更”场景极少,比如审计谁动了文件属主,否则一律避开
-ctime
实操中绕不开的三个坑
参数写对只是第一步,路径、权限、空格处理不对,照样找不到或报错。
- 路径末尾不加
/是安全的,但若目标是符号链接且你希望进入其指向目录,得显式加/(如find /var/log/),否则find默认不跟随 - 用
-exec时,{}和\;之间必须有空格,写成{} \;才合法;漏空格会报find: missing argument to '-exec' - 文件名含空格或特殊字符时,
-print0+xargs -0是唯一可靠组合,例如:find /tmp -mmin -5 -print0 | xargs -0 ls -l
按分钟查比按天查更准,但代价是性能
-mmin 需要遍历每个文件并读取其 stat 结构,而 -mtime 在某些文件系统上可借助目录时间戳粗筛。当目标目录极深或文件极多(如 /var/log 下百万级小文件),-mmin -1 可能卡顿数秒,-mtime -1 则快得多。
- 日常排查:优先
-mmin -30,精准定位最近半小时变动 - 定时任务或大目录扫描:改用
-mtime -1,再配合-maxdepth 2限深 - 永远在真实路径前加
timeout 10防卡死,例如:timeout 10 find /home -mmin -5 -name "*.log"
时间参数本身不难,难的是每次执行前想清楚:你要的到底是“内容变了”,还是“权限变了”,抑或只是“有人碰过这个文件”。选错参数,结果就差一个世界。


















