find命令主要功能是根据文件的属性, 如:文件名, 文件类型, 文件大小, 文件的目录深度 等, 来对文件进行搜索。
如果需要根据文件名进行搜索, 需要使用参数 -name。根据文件名进行搜索有两种方式: 精确查询和模糊查询。关于模糊查询必须要使用对应的通配符,最常用的有两个, 分别为 *和 ?。其中 * 可以匹配零个或者多个字符, ?用于匹配单个字符。
#语法格式
find 搜索的路径 -name 要搜索的文件名
#例如
find ./ -name "*.txt"
#语法格式
find 搜索的路径 -type 要搜索的文件类型
#例如
find ./ -type f
如果需要根据文件大小进行搜索, 需要使用参数 -size。关于文件大小的单位有 k(小写), M(大写), G(大写)。关于文件大小的区间划分,这里举例如下:
# 搜索当前目录下 大于3M的所有文件 (3M, 正无穷)
$ find ./ -size +3M
# 搜索当前目录下 大于等于0M并且小于等于2M的文件 [0M,2M]
$ find ./ -size -3M
# 搜索当前目录下 大于2M并且小于等于3M的文件 (2M,3M]
$ find ./ -size 3M
# 搜索当前目录下 大于1M 并且 小于等于 3M 的文件 (1M,3M]
$ find ./ -size +1M -size -4M
因为Linux的目录是树状结构, 所有目录可能有很多层, 在搜索某些属性的时候可以指定只搜索某几层目录, 相关的参数有两个, 分别为: -maxdepth和-mindepth。这两个参数不能单独使用, 必须和其他属性一起使用,也就是搜索某几层目录中满足条件的文件。
# 查找文件, 从根目录开始, 最多搜索3层, 这个文件叫做 *.txt (1 <= 层数 <= 3)
find / -maxdepth 3 -name "*.txt"
-exec、-ok和xargs 都是find命令执行多步操作的参数,其中-ok参数是交互式的,在处理find的结果的时会向用户发起询问。而xargs参数更高效,可以在find命令中直接使用管道完成前后命令的数据传递, 演示如下:
# 查找文件, 并且显示文件的详细信息
find ./ -maxdepth 2 -name "*.txt" | xargs ls -l
xargs的效率比 -exec 效率高的原因是:-exec将find查询的结果逐条传递给后边的shell命令,xargs将find查询的结果一次性传递给后边的shell命令。