Linux中find的用法

Linux系统中的 find 命令在查找文件时非常有用而且方便。它可以根据不同的条件来查找文件,例如权限、拥有者、修改日期/时间、文件大小等等。

语法

1
find [-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
3
find /webserver -name "*controller" ! -name "host-controller"
/webserver/jboss7-2103/modules/org/jboss/as/process-controller
/webserver/jboss7-2103