✨ find命令参数详解
find 是 Linux 中最强大的文件查找工具,其核心语法结构为:
find [搜索路径] [匹配条件] [处理动作]
我将所有参数按路径、选项、测试条件(核心)、处理动作、逻辑运算符五大类为你详细拆解,并附上实用的记忆口诀。
1. 路径 (Path) —— 从哪找
指定搜索的起始目录,可以同时指定多个。
-
. :当前目录(默认值)。 -
/ :根目录(全盘搜索)。 -
~ :用户家目录。 -
/var /etc:指定多个目录。
2. 选项 (Options) —— 控制搜索范围(行为约束)
这些参数影响搜索过程本身,不针对文件属性。
| 参数 | 含义 | 示例 |
|---|---|---|
-maxdepth N |
最大搜索深度(进入子目录的层数)。 | find / -maxdepth 3 -name "*.conf"(只搜到第三层子目录)。 |
-mindepth N |
最小搜索深度(忽略浅层目录)。 | find / -mindepth 3(忽略根目录和一级子目录)。 |
-mount 或 -xdev |
不跨文件系统分区(防止进入 /proc、/sys 或挂载的硬盘)。 |
巡检时常用,避免扫描虚拟目录或挂载点。 |
-follow |
跟随符号链接(若链接指向目录,则进入该目录搜索)。 | 默认 find 不跟随链接。 |
-regextype |
指定正则表达式类型(如 posix-egrep)。 |
配合 -regex 使用。 |
💡 记忆点:选项控制“怎么搜”,而非“搜什么”。
3. 测试条件 (Tests) —— 搜什么(最核心)
这部分定义了文件的匹配规则,可组合使用。
-
按文件名
-
-name "pattern" :区分大小写的文件名匹配(支持*?[] 通配符)。find . -name "*.log" -
-iname "pattern" :不区分大小写的-name。find . -iname "error*" -
-regex "pattern" :使用正则表达式匹配完整路径(而非仅文件名)。find . -regex ".*/tmp/.*\.txt" -
-iregex:不区分大小写的-regex。 -
-path "pattern" :匹配文件的完整路径。find . -path "./src/*.java"
-
-
按文件类型 (
-type)代码 含义 f普通文件(最常用) d目录 l符号链接 b块设备(如硬盘) c字符设备(如键盘) sSocket 套接字 p管道文件 -
按文件大小 (
-size)使用单位:
c(字节)、k(KB)、M(MB)、G(GB)。-
-size +100M:大于 100MB。 -
-size -1G:小于 1GB。 -
-size 10k:精确等于 10KB。
-
-
按时间戳(常用)
时间单位默认为天(
d ) ,也可用分钟(m,即cmin/mmin等)。参数 含义(以天为例) 示例 -mtime +N修改时间(Modify)在 N天前(>N天)。 -mtime +7(修改于7天前的文件) -mtime -N修改时间在 N天内(<N天)。 -mtime -1(最近24小时内修改过) -mtime N修改时间恰好 N天前(第N天)。 -atime访问时间(Access),规则同 -mtime。 -ctime状态改变时间(Change,权限/属主改变),规则同 -mtime。 -mmin / -amin / -cmin规则同上,单位为分钟。 -mmin -5(5分钟内修改)💡 记忆口诀:
+ 代表“超过(以前)”,- 代表“以内(最近)”。mtime 改内容,ctime 改属性,atime被查看。 -
按权限/属主
-
-user username:属主为指定用户。 -
-group groupname:属组为指定组。 -
-uid N / -gid N:数字 ID。 -
-perm mode:权限精确匹配(如-perm 644)。 -
-perm -mode:包含这些权限位(如-perm -u=x表示属主有执行权限)。 -
-perm /mode:任意一位匹配(如-perm /u=x表示属主、组或其他任一有执行权限)。 -
-nouser:文件属主在/etc/passwd中不存在(孤儿文件,异常)。 -
-nogroup:文件属组在/etc/group中不存在。
-
-
其他条件
-
-empty:空文件或空目录。 -
-links N:硬链接数为 N。
-
4. 处理动作 (Actions) —— 找到后干什么
-
-print:默认动作,将路径打印到屏幕(加换行)。 -
-print0:打印路径并用空字符 \0 结尾(专用于配合xargs -0处理含空格/换行的文件名)。 -
-ls:以ls -dils 格式详细列出文件信息(类似ls长格式)。 -
-delete:直接删除找到的文件(极其危险,无回收站)。 -
-exec command {} \; :对每个文件单独执行命令({} 为占位符,\;结束)。 -
-exec command {} + :将找到的多个文件一次性传递给命令(高效,类似xargs)。 -
-ok command {} \; :同-exec,但每次执行前都询问确认(安全)。 -
-quit:找到一个匹配文件后立即退出(适合验证文件是否存在)。
5. 逻辑运算符 (Operators) —— 组合条件
-
-a (AND) :与。多个条件默认就是-a 关系。find . -name "*.txt" -size +1k -
-o (OR) :或。find . -name "*.log" -o -name "*.tmp" -
! 或 -not:非(取反)。find . ! -name "*.txt"(排除 txt 文件)。 -
\( ... \) :分组,用于改变优先级(必须转义)。find . \( -name "*.c" -o -name "*.h" \) -type f
-
综合示例(覆盖绝大多数场景)
# 查找 /var/log 下,7天前修改、大小超过100M、并以 .log 结尾的普通文件,删除前预览 find /var/log -type f -name "*.log" -mtime +7 -size +100M -exec ls -lh {} \; # 查找当前目录下所有权限为777的危险文件 find . -type f -perm 777 # 查找 /home 下属主已被删除的文件(孤儿文件) find /home -nouser -o -nogroup # 忽略子目录深度,只找根目录下的某个文件(限制深度) find / -maxdepth 1 -name "passwd" # 处理文件名含空格:打印后交给 xargs 安全删除 find . -type f -name "* *.txt" -print0 | xargs -0 rm -f
-
速查记忆树
find [路径] [选项] [条件] [动作]- 路径:从哪里搜(
/.~)。 - 选项:怎么搜(
-maxdepth-mount)。 - 条件:搜什么(
-name 名字,-type 类型,-size 大小,-mtime 时间,-user属主)。 - 动作:搜完干啥(
-print 显示,-exec 执行,-delete删掉)。
掌握这个参数结构,你就能像搭积木一样组合出任意复杂的查找命令。有任何特定场景的查找需求,随时可以问我。
- 路径:从哪里搜(
阅读:207
发布时间: