引言: 想查哪就查哪,蒙多
1. 作用
根据条件查找某个路径下符合规则的文件、文件夹信息
2. 基础格式
基础语法格式:
find [路径] [选项] [操作]
3. 常用选项
选项
含义
-name
根据文件名查找
-perm
根据文件权限查找
-prune
该选项可以排除某些查找目录
-user
根据文件属主查找
-group
根据文件属组查找
-mtime -n | +n
根据文件更改时间查找
-nogroup
查找无有效属组的文件
-nouser
查找无有效属主的文件
-newer file1 !file2
查找更改时间比file1新但是比file2旧的文件
-type
按照文件类型查找
-size -n | +n
按文件大小查找
-mindepth n
从n级子目录开始搜索
-maxdepth n
最多搜索到n级子目录
4. 场景实操
注:以下场景均以 /tmp 文件夹为示例,实际使用过程中,请替换成要搜索的路径
4.1 根据文件名查找文件(常用)
# 查找 /tmp 目录下以abc开头的文件
find /tmp -name 'abc*'
# 查找 /tmp 目录下所有的json文件
find /tmp -name '*.json'
# 当不填写路径时,默认当前路径,等同于 find .
find -name 'abc*'
# 使用 -iname忽略大小写匹配
find /tmp -iname 'abc*'
4.2 根据文件归属查找文件
# 查找/tmp目录下,属主为root的文件
find /tmp -user root
# 查找/tmp目录下,属组为root的文件
find /tmp -group root
4.3 根据文件类型查找文件
-type 可用值有如下选项:
f 文件
d 目录
c 字符设备文件
b 块设备文件
l 链接文件
p 管道文件
# 查找/tmp目录下,名字中带有abc的文件
find /tmp -name '*abc*' -type f
# 查找/tmp目录下,名字中带有abc的文件夹
find /tmp -name '*abc*' -type d
4.4 根据文件大小查找文件
-size 可用值有如下选项:
+n 大小大于n的文件
-n 大小小于n的文件
n大小等于n的文件(部分发行版匹配不到,不推荐使用)
# 查找/tmp目录下小于200字节的文件
find /tmp -size -200c
# 查找/tmp目录下大于1M的文件
find /tmp -size +1M
可选的单位选项:
b 块,1b=512字节
c 字节 1c=1字节
w 2字节 1w=2字节
k 千字节 1k=1024字节
M 兆字节 1M=1024*1024字节
G 1G=102410241024 字节
4.5 根据修改时间查找文件
-mtime 可用值有如下选项:
-n n天以内修改的文件
+n n天以外修改的文件
n 正好n填修改的文件
-mmin 可用值有如下选项:
-n n分钟以内修改的文件
+n n分钟以外修改的文件
# 查找/tmp目录下30天之前修改名称包含abc的文件
find /tmp -name '*abc*' -mtime +30 -type f
# 查找/tmp目录下3分钟内修改的文件
find /tmp -mmin -3 -type f
4.6 过滤查找目录层级
# 从/tmp的第2级子目录开始搜索,名称中包含abc的文件
find /tmp -mindepth 2 -name '*abc*'
# 搜索/tmp中名称中包含abc的文件,最多搜索到3级目录
find /tmp -maxdepth 3 -name '*abc*'
目录层级过滤条件要放到最前面,这样匹配之前就过滤掉了不需要匹配的目录,效率最高
4.7 查找无归属的文件
# 查找/tmp下无属主的文件
find /tmp -nouser
# 查找/tmp下无属组的文件
find /tmp -nogroup
4.8 根据权限查找文件
# 查找所有拥有最高权限的文件,排查风险
find /tmp -perm 777
4.9 过滤某些特定文件夹
# 查找/tmp下名称中包含abc的文件,排除掉/tmp/ddd文件夹下的文件
find /tmp -path /tmp/ddd -prune -o -name '*abc*'
4.10 根据新旧关系过滤文件
# 查找/tmp下名称中包含abc,而且修改时间大于file1的文件
find /tmp -newer file1 -name '*abc*'
# 查找/tmp下名称中包含abc,而且修改时间大于file1,小于file2的文件
find /tmp -newer file1 !file2 -name '*abc*'
4.11 查找到文件后进行操作
-print 默认选项,将查找到的内容打印出来,可不加
-exec 对查找到的文件,进行特定的操作,命令格式为 -exec 'command' {} ;
-ok 和exec 功能类似,但是涉及到提示的地方,会给用户相关提示
使用示例:
# 删除/tmp目录下,名称中包含abc的所有文件
find /tmp -name '*abc*' -type f -exec rm -rf {} \;
# 将/tmp目录下,名称中包含abc的所有文件复制到 /tmp1目录下
find /tmp -name '*abc*' -type f -exec cp {} /tmp1 \;
# 将/tmp目录下,以.log结尾的,更改时间在7天以上的文件,全部删除
find /tmp -name '*.log' -mtime +7 -exec rm -rf {} \;
4.12 多个条件之间的逻辑运算符
-a 与,添加多个条件时,默认就是与关系,可以省略不加
-o 或
-not | ! 非
# 查找/tmp目录中,所有属主不是root的文件
find /tmp -not -user root
# 查找/tmp目录中,文件名中包含abc或者大小大于1M的文件
find /tmp -type f -a \( -name '*abc*' -o -size +1M \)
5. 相似命令对比
5.1 locate
作用:文件查找
与find命令的差异:
find命令扫描磁盘,locate从数据库文件中进行查找
find默认精准匹配,locate默认模糊匹配
locate数据库文件,一般每天生成一次,不能实时查询到最新数据,可通过updatedb手动触发数据库文件更新
5.2 whereis
作用:查找某个可执行二进制文件、帮助文档、源代码文件等
常用参数:
不加参数,返回二进制文件、帮助文档文件、源代码文件
-b 只返回二进制文件
-m 只返回帮助文档文件
-s 只返回源代码文件
5.3 which
作用: 查找可执行二进制文件,等同于 whereis -b
5.4 各查找命令的适用场景
命令
适用场景
优缺点
find
查找某一类文件
功能强大,需要扫描磁盘,速度慢
locate
只可以查找单个文件
功能单一,从系统数据库查询,速度快
whereis
查找程序的可执行文件、帮助文档等
查找帮助文档、源代码用
which
只可以查找程序的可执行文件
用于查找可执行命令的绝对路径