「Linux 系统编程」find 命令

1 find 命令

find 是 Linux 系统中一个非常强大的文件搜索工具,它能够根据各种条件在指定目录下 递归查找文件和目录

1
find [搜索路径] [匹配条件]

如果不指定 搜索路径,默认在当前目录搜索,即 ./

1
find [匹配条件]   # 默认在当前目录搜索

find 也可以在后面添加 执行操作 参数,在 4 对搜索结果执行操作


2 搜索方式

2.1 按文件名搜索

  • -name "文件名":精确匹配文件名(区分大小写)
1
find ./ -name "a.cpp"  # 在当前目录查找 a.cpp 文件


  • -iname "文件名":忽略大小写匹配文件名称
1
find ./ -iname "A.Cpp"  # 查找 a.cpp、A.CPP 等类似名称的文件


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

1
find ./ -name "*.txt"   # 查找所有 .txt 文件


2.2 按文件类型搜索

  • -type f:普通文件
  • -type d:目录
  • -type l:符号链接
1
find ./ -type d  # 查找所有类型为 目录 的文件


1
find ./ -type f -name "*.cpp" # 查找所有类型为 普通文件 的且后缀为 cpp 的文件


2.3 按文件大小搜索

  • -size [+/-]大小:+ 表示大于,- 表示小于
  • 单位:c(B)、k(KB)、M(MB)、G(GB)
1
find ./ -type f -size +1k -size -2M  # 查找当前目录中大于1KB且小于2MB的普通文件

注意: 执行 find -size -1Mfind -size -1k 等类似命令时出现了问题,只显示大小为 0 的文件,这与理论结果不符,暂且不知道具体原因。可以转而采用 find -size -1024k 的形式执行命令。


2.4 按修改时间搜索

  • -atime [+/-]天数:按访问时间
  • -mtime [+/-]天数:按内容修改时间
  • -ctime [+/-]天数:按状态更改时间
1
2
find ~ -type f -mtime +7  # 查找家目录下7天前修改过的普通文件
find ./ -atime -1 # 查找当前目录下1天内访问过的文件


2.5 组合条件搜索

  • -a:逻辑与(默认,可省略)
  • -o:逻辑或
  • !:逻辑非
1
2
find ./ -type f -name "*.txt" -o -name "*.md"  # 查找txt或md文件
find ./ -type f ! -name "*.cpp" # 查找不是log后缀的文件


3 指定搜索的深度

在 find 命令中,-maxdepth 参数用于限制搜索的目录深度,避免无限制地递归到过深的子目录中。

1
find [搜索路径] -maxdepth 级别 [其他匹配条件]

级别 是一个非负整数,表示最大搜索深度:

  • 1:搜索起始目录(不深入任何子目录)
  • n:最多深入到第 nn 级子目录
1
2
3
4
5
# 只在当前目录(不进入任何子目录)查找 .txt 文件
find ./ -maxdepth 1 -type f -name "*.txt"

# 结合 -mindepth 使用(限制最小深度):
find ~ -mindepth 2 -maxdepth 3 -type f -name "*.txt"


-maxdepth-mindepth 需要 放在所有参数的前面(如 -name-type)。

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


4 对搜索结果执行操作

  • -exec 命令 {} \;:对每个结果执行命令

其中 {} 代表搜索到的文件集合,\; 表示执行结束符号(\ 为转义字符)。

1
2
find ./ -name "*.cpp" -exec ls -l {} \;  # 显示当前目录下所有.cpp文件的详细信息
find ./ -name "*.sh" -exec rm -r {} \; # 删除当前目录下所有.sh文件


  • -ok 命令 {} \;:先询问用户是否执行操作,确认后才会执行命令(交互式执行命令)
1
2
# 删除当前目录下所有.cpp文件,每删除一个都进行确认
find ./ -name "*.cpp" -ok rm -r {} \;



「Linux 系统编程」find 命令
https://marisamagic.github.io/2025/08/05/20250805/
作者
MarisaMagic
发布于
2025年8月5日
许可协议