find
命令是一个强大的文件搜索工具,广泛用于 Unix/Linux 系统及 macOS 中,可根据文件的名称、类型、大小、修改时间、权限等条件查找文件或目录。以下是其常见用法及详细说明:
一、基本语法
find [路径] [条件] [操作]
路径:指定搜索的起始目录,默认为当前目录(
.
)。条件:设置搜索的条件(如文件名、大小、时间等)。
操作:对找到的文件执行的操作(如显示、删除、执行命令等)。
二、常用条件参数(按功能分类)
1. 按文件名搜索(最常用)
-name "模式"
:按文件名匹配,支持通配符(*
表示任意字符,?
表示单个字符)。
find /home/user -name "*.txt" # 搜索/home/user目录下所有.txt文件
find . -name "doc?.*" # 搜索当前目录下文件名以doc开头、第三个字符任意且带扩展名的文件
-iname "模式"
:不区分大小写的文件名匹配。
find . -iname "readme.md" # 匹配Readme.md、README.md等
2. 按文件类型搜索
-type [d/f/l/c/b]
:指定文件类型。
d
:目录(directory)f
:普通文件(file)l
:符号链接(link)c
:字符设备文件(character)b
:块设备文件(block)
find /usr -type d -name "bin" # 搜索/usr目录下名为bin的目录
find /dev -type c # 搜索/dev目录下的字符设备文件
3. 按文件大小搜索
-size [+/-]数值[单位]
:按文件大小过滤(+
表示大于,-
表示小于)。单位:
b
(字节)、k
(KB)、m
(MB)、g
(GB)。
find /var -size +100m # 搜索/var目录下大于100MB的文件
find . -size -5k # 搜索当前目录下小于5KB的文件
4. 按修改时间搜索
-mtime [+/-]数值
:按文件内容最后修改时间(单位:天)。
+n
:n 天前修改的文件-n
:n 天内修改的文件
find /logs -mtime +30 # 搜索/logs目录下30天前修改的文件
-mmin [+/-]数值
:按分钟计算(用法同上)。
三、常用操作参数
1. 显示搜索结果
-print
:默认操作,显示文件路径(可省略)。
find /etc -name "passwd" # 等价于find /etc -name "passwd" -print
-ls
:以类似ls -l
的格式显示详细信息。
find . -type f -ls # 显示当前目录下所有普通文件的详细信息
2. 对文件执行命令
-exec 命令 {} \;
:对每个匹配的文件执行指定命令,{}
表示当前文件路径,\;
表示命令结束。
find . -name "*.log" -exec rm {} \; # 删除当前目录下所有.log文件(慎用!)
find /tmp -type d -exec chmod 755 {} \; # 给/tmp目录下的所有子目录设置755权限
-ok 命令 {} \;
:与-exec
类似,但执行前会询问确认。
四、高级用法与示例
1. 组合条件(逻辑运算)
-and
或 &&
:同时满足多个条件。
find /home -type f -name "*.sh" -and -size +10k # 搜索/home目录下.sh文件且大于10KB的文件
-or
或 ||
:满足任意一个条件。
find . -name "config" -or -name "settings" # 搜索当前目录下名为config或settings的文件
-not
或!
:排除条件。
find /usr -type f -not -name "*.txt" # 搜索/usr目录下非.txt的文件
2. 限制搜索深度
-maxdepth 数值
:限制搜索的最大目录层级。
find /var/log -maxdepth 2 -name "*.log" # 只在/var/log下1-2级目录中搜索.log文件
3. 查找空文件或目录
-empty
:匹配空文件或空目录。
find /tmp -empty # 搜索/tmp目录下的空文件或空目录
五、注意事项
权限问题:搜索系统目录(如
/usr
、/etc
)时可能需要root
权限。性能影响:在根目录(
/
)或大目录中搜索可能耗时较长,建议尽量缩小搜索范围。通配符转义:在 shell 中使用通配符时,若文件名包含特殊字符(如空格、
*
),需用引号包裹或转义(\
)。安全操作:使用
-exec rm
等危险命令时,建议先用-print
确认结果,再执行操作。