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