文件查找
find
帮助文档 Finding Files
1 | # 常用 |
详细说明
1 | # 查找[path]下[filename]文件 |
[path]可以是相对路径可以是绝对路径,也可以是多条路径,[filename]是完全匹配,不是包含子字符串就能匹配成功的,可以使用通配符*
,如果命令较为简单,[filename]可以不用加表示字符串的双引号,参数过多会出现识别不了的问题,此时要加上双引号。
最大深度设为1的话还可以使用ls
+grep
:ls /etc | grep conf
,除了maxdepth,还有mindepth,用法一样,如果要查找第n层的结果,让最大深度和最小深度的值一样即可
1 | # -maxdepth +数字为搜索的最大层数 |
1 | # 查找目录 |
如果一个路径的几层都能和[dirname]匹配,那这几层都会在结果中分条显示出来
type后能接的类型:
- f 普通文件
- d 目录
- l 符号连接
- b 块设备
- s 套接字
匹配多种类型的话用逗号隔开
1 | # 多条件查找 |
两个-name
之间什么都不加,默认是AND与操作,如果用OR或操作,加上-o
1 | # 查找文件大小大于/大于/等于size的 |
[size]前不带符号(没有“=”号)如果文件使用[size]个单位的空间(向上取整),则为true,数字前加上“+”号,表示如果文件使用至少n个存储单元,“-”号表示文件使用少于n个存储单元
[size]数字后不带字母,默认是512字节块,后面可以带上如下单位(区分大小写):
b(小写),512字节
c(小写),1字节
w(小写),2字节
k(小写),KB
M(大写),MB
G(大写),GB
1 | # 查找文件中符合权限的文件 |
linux中权限表示有两种,一种是用数字表示,读权限是4,写是2,执行是1,具有哪个权限加起来就行,比如读写可执行是7,读写是6,读可执行是5。而linux针对不同的用户(user,group,others)又分别赋予权限,所以会看到三个数字,比如777,664等。
另一种是用字母表示,ugo分别代表user,group,others,a则代表所有人。rwx代表读、写、可执行。
在表示权限的字母/数字前如果什么都不加就是精确匹配,而加上短横线-
代表含有表示的权限就能匹配,而/
代表三个用户中有一个满足即可(无权限除外)
做一个简单的小实验,先用bash生成不同权限的文件,忽略others,生成权限不同的16个文件
1 | for i in {1..16} |
依次执行下面三条命令,为了看的更清楚,使用了-exec
,将find的结果用ls -l
显示出来,这里的[path]没有用.
或者./
,是因为会find到.
这个目录本身,而目录能正常访问,至少要具有500的权限,所以采用了./*
的写法。结果已经很清晰明了了。
1 | find ./* -perm 420 -exec ls -l {} \; |