结论:find查文件需注意-name/-iname、-mtime/-mmin、-size三类参数,必须加引号防shell展开,加-type f排除目录,单位与符号含义要准确(如-size +100m是大于100mib),-mtime按24小时整数天计算,近期时间宜用-mmin。

直接说结论:用 find 按名称、时间、大小查文件,核心就三类参数:-name(或 -iname)、-mtime/-mmin、-size。但不加 -type f 容易混进目录,不加引号容易被 shell 展开出错,不注意单位换算会漏掉目标文件。
按文件名查找必须加引号,区分大小写要心里有数
常见错误是直接写 find /var/log -name *.log,结果 shell 先把 *.log 当前目录下匹配展开,find 实际收到的是零个或多个字面量,不是通配表达式。正确做法永远用单引号或双引号包住模式。
-
find /var/log -name "*.log"—— 只匹配以.log结尾的普通文件(不含目录) -
find /home -iname "readme*"—— 忽略大小写,能匹配README.md、ReadMe.txt - 如果只想找文件,不想要同名目录,显式加上
-type f:find /etc -name "nginx.conf" -type f - 想排除某个子目录(比如不要
/var/log/journal),用-path+-prune:find /var/log -path "/var/log/journal" -prune -o -name "*.log" -print
按修改时间查,-mtime 和 -mmin 单位完全不同
-mtime 是“24 小时为单位”的整数天,-mmin 是“分钟”级精度。很多人用 -mtime -1 想找 24 小时内改过的,结果发现 23 小时前的文件没出来——因为 -mtime -1 表示“少于 1 天”,即 0 天,也就是“今天刚改的”(从 00:00 开始算)。真正想找最近 24 小时,得用 -mmin -1440。
-
find /tmp -mmin -60—— 找过去 60 分钟内修改过的文件 -
find /var/www -mtime -3—— 找过去 3×24 小时内(即不到 72 小时)修改过的文件 -
find /home -mtime 7—— 找“恰好 7 天前”(即第 7 天的 00:00–23:59)修改的文件,不是“7 天内” - 若需更灵活的时间范围(如 2~5 天前),得组合
-mtime +1 -mtime -6(大于 1 天且小于 6 天)
按大小查找,单位字母和正负号含义容易搞反
-size 后面的单位字母是固定的:c(字节)、k(KB)、M(MB)、G(GB)。而符号表示方向:+ 是“大于”,- 是“小于”,不带符号是“等于”。注意:1 MB = 1024 KB,但 find 中的 M 是 1024×1024 字节,不是 1000×1000。
-
find /var -size +100M—— 找大于 100 MiB 的文件(约 104,857,600 字节) -
find /etc -size -1k—— 找小于 1 KiB(即 1024 字节)的文件 -
find /boot -size 512c—— 找大小**恰好**为 512 字节的文件 - 误写成
-size +100m(小写 m)会报错:find: invalid argument +100m to -size
真正难的不是记命令,而是理解 find 的表达式逻辑:它默认是 AND 关系,但 -o(OR)和 -not 会改变优先级,括号又不被 shell 直接支持,得用 \( \) 转义。实际用的时候,先写最窄条件(比如 -name "*.log"),再逐步加 -mtime 或 -size,每加一个都验证输出是否合理,比一口气堆参数靠谱得多。











