Linux 下一切皆文件,所以搜索功能 find 是一条很重要的指令。 Linux 下 find 指令用于在目录结构中快速搜索到需要的文件,并指定操作。find 指令提供了相当多的查找条件。在未指定查找目录的情况下,find 会对整个系统进行遍历。
一、基本规则
1、命令格式:
find [查找目录] [查找规则] [查找完后执行的操作]
eg: find pathname -option [-print -exec -ok ....]
eg: find ./ -name index.html ,在当前目录下查找文件名问 index.html 的文件
2、命令参数:
- pathname : 所要查找的目录路径,如
.
表示当前路径,/
表示根目录 - -print :将 find 找到的文件输出到标准输出
- -exec : 找到对应文件执行 exec 这个参数所指定的 shell 命令
二、查找规则
1、根据文件名查找
1) -name : 根据文件名区分大小写查找
eg : find ./ -name index.html
在当前目录中查找名称为 index.html 的文件,区分大小写
2) -iname : 根据文件名查找,不区分大小写
eg : find ./ -iname index.html
在当前目录中查找,不区分大小写,文件名可以为 index.html / inDex.htmL / Index.HTML
3) *
: 文件名通配符
- eg : find ./ -name file*
在当前目录下查找,区分大小写,文件名以 file 开头的文件 - eg : find ./ -name *file
在当前目录下查找,区分大小写,文件名以 file 结尾的文件 - eg : find ./ -name file
在当前目录下查找,区分大小写,文件名 包含 file 的文件
4) ?
:任意单个字符
eg : find ./ -name 'file?'
在当前目录下查找,区分大小写,文件名以 file 开头以任意字符结尾 的文件
5)[]
通配中括号内的任意一个字符,且 []
里面的内容会被解析成单个字符
eg :find ./ -name 'file[123]'
在当前目录下查找,区分大小写,文件名以 file 开头 1/2/3 结尾 的文件
2、根据文件的时间戳信息查找
根据时间戳信息查找的时候,time 是以天为单位, min 都是以分钟为单位,+n 表示 n 以前,-n 表示 n 以内。
1) 以最近一次存取的时间为参数
- eg :find ./ -atime(或 -amin)+1
1 天前(1 分钟前)存取过的文件 - eg :find ./ -atime(或 -amin) -1
以当前时间为起点,1 天内(1 分钟内)存取过的文件
2)以最近一次更改的属性为参数
示例跟以上类似,将 -atime/-amin 替换成为 -ctime/-cmin。二者不同的地方在于 -atime/-amin 是查找内容被修改的文件,-ctime/-cmin 是查找文件名称、属性被修改的文件。
3、根据文件所属用户和所属组查找文件
1)-user
:根据文件所有者查找文案
eg :find ./ -user root
在当前目录下,查找所有者是 root 用户的文件
2) -group
eg :find ./ -group root
在当前目录下,查找文件用户组名是 root 的文件
4、根据 nouser 或 nogroup 查找
1) 查找无有效 属主/属组 的文件
eg : find ./ -nouser(-nogroup)
5、根据权限来查找文件
eg : find ./ perm 777
6、根据 uid 或者 gid 查找文件
- -uid : 根据文件的 uid 查找
- -gid : 根据文件所在组的 gid 查找
7、根据文件类型查找
- eg : find ./ -type f
在当前目录下查找文件类型为普通文件的文件 - eg : find ./ -type d
在当前目录下查找文件类型为目录的文件 - 其他:
- I :链接文件
- b :块设备文件
- c :字符设备文件
- p :管道设备文件
- s :套接字文件
8、-size
:按照文件大小查找
- +n :大于 n 字节的文件
- -n :小于 n 字节的文件
- n :等于 n 字节的文件
- eg :find ./ -size 0
在当前目录下查找文件大小为 0 的文件
9、-newer
:按照参考文件的更改时间查找
eg :find ./ -newer file
查找更改时间比 file 的更改时间距离当前时间更近的文件
10、maxdepth
和 mindepth
-
-maxdepth
:搜索深度距离当前目录最多 n 个子目录深度 -
-mindepth
:搜索深度距离当前目录最少 n 个子目录深度 - eg : find ./ maxdepth 2 -name file
在当前目录查找,目录深度最多为 2 且文件名为 file 的文件
11、-empty
:查找路径下为空的文件或文件夹
eg :find ./ -empty
在当前目录下查找空的文件或文件夹
12、-link
:按照硬连接的数目进行查找
- -link +n :硬连接的数目大于 n 的文件或文件夹
- -link n :硬连接的数目大于 n 的文件或文件夹
- -link -n :硬连接的数目小于 n 的文件或文件夹
13、-a
、-o
、-not
:条件处理,分别相当于 与、或、非的关系
- eg:find ./ -szie +0 -a -size -9
在当前目录下查找,文件大小大于 0B 小于 9b 的文件,以上两个条件必须同时满足 - eg:find ./ -size 8 -o -name index.html
在当前目录下查找,大小为 8k 或者文件名为 index.html 的文件,以上两个条件只要满足一个即可 - eg:find ./ -not -size 0
在当前目录下查找,文件大小不为 0k 的文件,进行取非操作
14、查找完成之后的操作
- find ./ -name file -exec ls -l {}
在当前目录下查询文件名为 file 的文件,并且针对查询出来的文件执行 ls -l 指令 - find ./ -name file -ok ls -l {}
执行操作跟上个语句类似,不同在于在打印每个文件的详细信息之前都会询问是否打印