Linux系统中的 find 命令在查找文件时非常有用而且方便。它可以根据不同的条件来查找文件,例如权限、拥有者、修改日期/时间、文件大小等等。
语法1find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
基础用法
1、列出当前目录及子目录下的所有文件
1
2
3
4
5
6$find .
.
./abc.txt
./subdir
./subdir/how.php
./cool.php
该命令和下面是一样的
1
2$find .
$find . -print
2、指定路径查找
通过指定绝对路径参数实现在指定的路径下查找匹配的文件
1
2
3
4
5
6
7$find ./webserver
./webserver
./webserver/nginx
./webserver/nginx/conf
./webserver/nginx/conf/nginx.conf
./webserver/bin
./webserver/bin/nginx
查询指定路径下的指定文件
1
2$find ./webserver -name "nginx"
./webserver/nginx/bin/nginx
通配符查询
1
2
3$find ./webserver -name "*.go"
./webserver/gateway/src/middleware/route.go
./webserver/gateway/src/middleware/route_map.go
由于在linux上区分大小写,所以在查询的时候可以指定参数来忽略大小写
1
2
3$find ./webserver -iname "*.erl"
./webserver/pushsvr/pushsvr.erl
./webserver/pushsvr/Message.erl
模式字符串要用双引号或者单引号包围,否则可能会产生不正确的结果。
3、限制查询目录的深度
find命令默认会递归查询整个目录树,当目录树很大的时候,会非常耗时。通过指定目录查询深度参数,实现查询指定目录深度的查询结果。
1
2$find ./webserver -maxdepth 2 -name "*.adb"
./webserver/controller/flycontrole.adb
与maxdepth选项相似,还有一个参数mindepth,通过指定mindepth参数,至少到达参数指定的目录层次后才开始查找文件。
1$find -mindepth 3 -type f -name "*.cpp"
4、反向匹配查找
在日常工作中经常也会有查询不满足条件的一些文件,这时候就需要使用反向匹配查找选项来实现我们的目的。
1
2
3
4
5
6$find ./webserver -not -name "*.asm"
./webserver
./webserver/gateway
./webserver/gateway/src/middleware/route.go
./webserver/controller
./webserver/controller/flycontroller.adb
查询指定目录下所有的非php文件,
这里也可以使用!感叹号来代替 -not ,比如:
1
2
3
4
5
6$find ./webserver ! -name "*.asm"
./webserver
./webserver/gateway
./webserver/gateway/src/middleware/route.go
./webserver/controller
./webserver/controller/flycontroller.adb
5、多条件查询
可以通过组合多个条件查询来实现更精确的查询。
1
2
3find /webserver -name "*controller" ! -name "host-controller"
/webserver/jboss7-2103/modules/org/jboss/as/process-controller
/webserver/jboss7-2103/modules/org/jboss/as/controller
查找名称中包含controller,并且排除host-controoler文件。
OR操作符
当使用多个条件查询时,find命令会将他们通过and操作符结合起来,必须满足所有的条件才会列出。当我们需要进行基于or运算的查找时,可以加上-o开关。
1
2
3$find /webserver -name "*.php" -o name "*.txt"
/webserver/abc.txt
/webserver/gateway/router.php
查找文件扩展名为txt或php的文件。
6、指定文件类型
当需要指定查询目录或者文件的时候,可以通过-type 参数实现,选项为f(文件)、d(目录)。 不指定该参数的时候,默认查询目录和文件。
1
2
3
4
5
6#查询目录、文件
$find . -name "abc*"
#只查询文件
$find . -type f -name "abc*"
#只查询目录
$find . -type d -name "abc*"
7、多目录查找