1 find 命令
find
是 Linux 系统中一个非常强大的文件搜索工具,它能够根据各种条件在指定目录下 递归查找文件和目录。
如果不指定 搜索路径,默认在当前目录搜索,即 ./
:
find
也可以在后面添加 执行操作 参数,在 4 对搜索结果执行操作
2 搜索方式
2.1 按文件名搜索
-name "文件名"
:精确匹配文件名(区分大小写)


也可以用通配符 *
进行文件名匹配:

2.2 按文件类型搜索
-type f
:普通文件
-type d
:目录
-type l
:符号链接

1
| find ./ -type f -name "*.cpp"
|

2.3 按文件大小搜索
-size [+/-]大小
:+ 表示大于,- 表示小于
- 单位:c(B)、k(KB)、M(MB)、G(GB)
1
| find ./ -type f -size +1k -size -2M
|

注意: 执行 find -size -1M
、find -size -1k
等类似命令时出现了问题,只显示大小为 0 的文件,这与理论结果不符,暂且不知道具体原因。可以转而采用 find -size -1024k
的形式执行命令。
2.4 按修改时间搜索
-atime [+/-]天数
:按访问时间
-mtime [+/-]天数
:按内容修改时间
-ctime [+/-]天数
:按状态更改时间
1 2
| find ~ -type f -mtime +7 find ./ -atime -1
|


2.5 组合条件搜索
-a
:逻辑与(默认,可省略)
-o
:逻辑或
!
:逻辑非
1 2
| find ./ -type f -name "*.txt" -o -name "*.md" find ./ -type f ! -name "*.cpp"
|

3 指定搜索的深度
在 find 命令中,-maxdepth 参数用于限制搜索的目录深度,避免无限制地递归到过深的子目录中。
1
| find [搜索路径] -maxdepth 级别 [其他匹配条件]
|
级别 是一个非负整数,表示最大搜索深度:
1
:搜索起始目录(不深入任何子目录)
n
:最多深入到第 n 级子目录
1 2 3 4 5
| find ./ -maxdepth 1 -type f -name "*.txt"
find ~ -mindepth 2 -maxdepth 3 -type f -name "*.txt"
|

-maxdepth
和 -mindepth
需要 放在所有参数的前面(如 -name
、-type
)。
find 严格按从左到右的顺序处理参数,一旦遇到非选项类表达式(如 -name
、-type
),就会开始执行搜索逻辑。而 -maxdepth
属于全局选项,若放在表达式(如 -name
)之后,此时搜索已开始,深度限制无法生效。

4 对搜索结果执行操作
其中 {}
代表搜索到的文件集合,\;
表示执行结束符号(\
为转义字符)。
1 2
| find ./ -name "*.cpp" -exec ls -l {} \; find ./ -name "*.sh" -exec rm -r {} \;
|

-ok 命令 {} \;
:先询问用户是否执行操作,确认后才会执行命令(交互式执行命令)
1 2
| find ./ -name "*.cpp" -ok rm -r {} \;
|
