查找命令

  • find:用于搜索文件,通过属性搜索文件
  • grep:用于搜索文件内容,正则表达式
  • locate:根据文件名搜索本地的磁盘文件

find

1.根据文件名查找(-name)

常用通配符:

  • *:可以匹配0个或多个字符
  • ?:用于匹配单个字符
1
2
# 查找当前路径下所有的.cpp文件
find . -name "*.cpp"

2.根据文件类型查找(-type)

文件类型 字符描述
普通文件 f
目录文件 d
软链接文件 l
字符设备文件 c
块设备文件 b
管道文件 p
本地套接字文件 s
1
2
# 查找当前路径下所有的文件夹
$ find . -type d

3.根据文件大小查找(-size)

  • -size 4k 表示区间(3k, 4k]
  • -size -4k 表示区间[0k, 4k]
  • -size +4k 表示区间(4k, 正无穷)
1
2
# 查找当前目录下 大于1M并且小于等于3M的文件
$ find . -size +1M -size -3M

4.限制查找的目录层级(-maxdepth, -mindepth)

  • -maxdepth:最多搜索到第多少层目录
  • -mindepth:最少搜索到第多少层目录

这两个参数不能单独使用。

1
2
# 从根目录开始,最多搜索五层,搜索".cpp"文件
$ find / -maxdepth 5 -name "*.cpp"

5.同时执行多个操作(-exec, -ok)

问题: find . -name “ *. txt” | grep “a”中find后面可以使用|管道传递给grep,但是不能使用管道传递给ls,例如find . -name “ *.cpp” | ls

1.为什么 find . -name “*.txt” | grep “a” 可以工作?

  • find . -name “*.txt” 会搜索当前目录及其子目录下所有扩展名为 .txt 的文件,并将这些文件名输出到标准输出(stdout)。
  • grep “a” 会从标准输入(stdin)读取数据,然后搜索包含字符串 “a” 的行,并将这些行输出到标准输出。
  • 管道 | 将 find 命令的输出作为 grep 命令的输入,因此 grep 可以接收到文件名并进行搜索。

2.为什么 find . -name “*.cpp” | ls 不能工作?

  • ls 命令通常用于列出目录中的文件和目录,而不是处理文件名列表。
  • find . -name “*.cpp” 会输出一系列文件名,但 ls 命令期望的是目录路径作为参数,而不是文件名列表。

可以使用exec,ok,xargs实现find命令执行完毕之后。再执行其他子命令。

exec

-exec是find的参数。可以在exec参数后添加其他需要被执行的shell命令,命令的尾部需要加一个后缀{} \;{}\;中间用空格分开。

1
$ find . -name "*.cpp" -exec ls -l {} \;

ok

-ok也是find命令的参数,是交互式的命令。

1
$ find . -maxdepth 2 -name "*.cpp" -ok ls -l {} \;

xargs

Unix命令,将接收到的输入数据转换为命令行参数,并构建一个完整的命令。通常与管道(|)组合使用。

1
$ find . maxdepth 2 -name "*.cpp" | xargs ls -l

grep

  • -r:递归搜索目录中的文件内容
  • -i:对应要搜索的关键字,忽略字符大小写
  • -n:在现实符合样式的那一行之前,标出该行的行号
1
2
$ grep "main" hello.c -i
$ find . -name "*.cpp" | grep "main" -n

locate

locate不搜索具体目录,而是搜索本地的数据库文件,这个数据库包含本地的所有信息。在使用locate之前,先使用updatedb命令手动更新数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 更新本地数据库文件
$ sudo updatedb

# 搜索所有目录下以main开头的文件
$ locate main

# 搜索指定目录下的以某个关键字开头的文件(要用绝对路径)
$ locate /home/zhm/Desktop/main

# 搜索的时候忽略文件名的大小写(-i)
$ locate main -i

# 列出前N个匹配到的文件名称
$ locate main -n 5

# 基于正则表达式进行文件匹配
# 示例:搜索以.cpp结尾的文件
$ locate -r "\.cpp$"

查找命令
http://example.com/2025/02/22/Linux/查找命令/
作者
ZhangHangming
发布于
2025年2月22日
许可协议