find命令详解
实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;
一、工作特性:
- 查找速度略慢;
- 精确查找,只查找文件路径的基名而非整个路径;
- 实时查找;
- 可能只搜索用户具备读取和执行权限的目录
二、 用法:
find [查找起始路径] [OPTIONS] [查找条件] [处理动作]
- 查找起始路径:指定具体搜索目标起始路径;默认为当前目录;
- 查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件;
- 处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;
1. 查找起始路径
查找时,可以指定搜索层级:
- -maxdepth level 最大搜索目录深度,指定目录为第一等级,其子目录为2等级;
-
-mindepth level 最小层级目录深度搜索,指最少搜索多少层
例子:只显示目录的二层,
~]$find -maxdepth 2 -mindepth 2 -name file
2、查找条件
即表达式,由选项和测试组成;测试结果通常为布尔型(”true”, “false”)
①根据文件名和inode查找:
- -name “pattern”:区分字符大小写
-
-iname “pattern”:不区分字符大小写
注意:此处pattern支持glob风格的通配符;例如 *, ?, [], [^] - -samefile name 相同inode好的文件
- -links n 链接数为n文件
- -regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非基名;一般不用;
② 根据文件从属关系查找:
- -user USERNAME:查找属主指定用户的所有文件;
- -group GRPNAME:查找属组指定组的所有文件;
- -uid UID:查找属主指定的UID的所有文件;
- -gid GID:查找属组指定的GID的所有文件;
- -nouser:查找没有属主的文件(不用跟用户名);
- -nogroup:查找没有属组的文件(不用跟组名);
③ 根据文件的类型查找:
-
-type TYPE:
f: 普通文件
d: 目录文件
l:符号链接文件
b:块设备文件
c:字符设备文件
p:管道文件
s:套接字文件
④ 组合测试:
- 与:-a, 默认组合逻辑,可省;
- 或:-o
- 非:-not, !
-
德.摩根定律
-
(非P)或(非Q)=非(P且Q)
+(非P)且(非Q)=非(P或Q)
注意:使用摩根定律时括号加上转义符\
例子:
!A -a !B = !(A -o B)
!A -o !B = ! (A -a B)
-
(非P)或(非Q)=非(P且Q)
⑤ 根据文件的大小查找:
-
-size [+|-]#UNIT
常用单位:k, M, G-
#UNIT:(#-1, #]
如:6k 表示(5k,6k] -
-#UNIT:[0,#-1]
如:-6k 表示[0,5k] -
+#UNIT:(#, oo)
如:+6k 表示(6k,无穷)
-
#UNIT:(#-1, #]
⑥ 根据时间戳查找:
以“天”为单位:
-
-atime [+|-]#
- #:[#, #-1)
- -#:(#, 0]
- +#:(oo, #-1]
- -mtime
- -ctime
以“分钟”为单位:
- -amin
- -mmin
- -cmin
⑦ 根据权限查找:
-
-perm [/|-]mode
- -mode:精确权限匹配;每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;非0权限位的“与”;只有当前面有/或者-时候,0表示不关注
-
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;非0权限位的“或”;
find -perm 755 会匹配权限模式恰好是755的文件
只要当任意人有写权限时,find-perm+222就会匹配
只有当每个人都有写权限时,find-perm-222才会匹配
只有当其它人(other)有写权限时,find-perm-002才会匹配
#### ⑧ 查找比某个文件新或比某个文件旧
-
-newer:选项
格式为:-newer newest_file_name ! -newer oldest_file_name
3、处理动作:
- -print:输出至标准输出;默认的动作;
- -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
- -delete:删除查找到的文件;
- -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
- -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;此处{}表示引用找到的文件的文件名;
- -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;此处{}表示引用找到的文件的文件名;
注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;但是有些命令不能接受过长的参数,此时命令执行会失败;如下方式可规避此问题:find | xargs COMMAND
原创文章,作者:oranix,如若转载,请注明出处:http://www.178linux.com/71346
评论列表(1条)
写的不错哦,盼盼,很地道,全面,点个赞