find命令详解

find命令是一种实时查找工具,通过遍历指定的路径完成文件查找

工作特点:

  由于是遍历指定路径,所以相对locate而言,它的查找速度略慢

  精确查找,与locate不同的是,find是遍历指定路径,而不是通过数据库查找

  实时查找,不需要向locate一样,定期更新数据库

  在查找的同时,只能搜索到用户具备读取和执行权限的文件

语法:

find [option]……[查找路径] [查找条件] [处理动作]

  查找路径:指定具体路径;默认为当前目录

  查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行,默认为找出指定路径下的所有文件

  处理动作:对符合条件的文件做操作,默认输出到屏幕

查找条件可以分为以下几类:

一、按搜索层级进行搜索

选项:-maxdepth level  #最大搜索目录深度

   -mindepth level  #最小搜索目录深度

举例:搜索ifcfg-ens33

 

 上图中,当没有加maxdepth层级选项时,默认将所有的同名的文件路径输出到了屏幕。

由于上图中指定以/为路径查找,所以/的文件为第一级,而/root/ifcfg-en33则为第二级,/etc/sysconfig/network-scripts/ifcfg-ens33则为第四级

 

二、通过文件名查找文件

-name “文件名称”  #通过文件名查找文件,支持通配符

举例:查找以.sh为后缀的文件

 

上图中用通配符*表示所有任意字符

三、通过inode号查找文件

-inum inode号  #通过inode号查找文件

举例:通过该inode号查找文件

 查找相同inode号的文件

-samefile 文件名  #查找和该文件inode号相同的文件

举例:查找和hello文件的inode号相同的文件

 

四、查找指定链接数的文件

-links n  #查找链接数为n的文件

举例:查找链接数为3的文件

 

五、模式匹配文件路径,而不是文件名

-regex 正则表达式  #通过正则表达式匹配文件路径,而不是文件名

举例:查找/root/passwd

 

六、按属主、属组、UID、GID查找

1、按照属主、属组

-user username  #查找属组为username的文件

-group groupname  #查找属组为groupname的文件

举例:查找/home下属主为wander的文件

同样也可以用查找属组为wander的文件

 

2、按UID或者GID查找文件

-uid Userid  #查找uid为Userid的文件

-gid Groupid  #查找gid为Groupid的文件

举例:查找/home下UID为1005的文件

 

gid和上图的用法一致

 

3、查找没有属主或属组的文件

-nouser  #查找没有属主的文件

-nogroup  #查找没有属组的文件

查找/home下没有属主的文件

 

 七、上图中的属主位为数字表示用户已经被删除,即没有了属主

 同样查找没有属组的文件和上图用法一样

通过文件类型查找

-type TYPE  #查找文件类型为TYPE的文件

f  #普通文件

d  #目录文件

l  #符号链接文件

s  #套接字文件

b  #块设备文件

c  #字符设备文件

p  #管道文件

举例:查找/root下的目录文件

 

 上图中我们结合maxdepth参数只查找第一级的内容

 

八、查找空文件或空目录

-empty  #空文件或目录

举例:查找/root下的空目录

 

 上图中,结合maxdepth和type参数使用查找空目录,如果是查找空文件则使用:

find /root -maxdepth 1 -type f -empty  #将文件类型改为f普通文件

 

九、组合条件查找

-a  :与即and的意思

-o  :或即or的意思

-not或者!  :非

举例:查找/root下的空文件或者空目录

 

举例:查找/root下文件类型为普通文件,且内容为空的文件

 

举例:查找/root下文件类型为普通文件,但是内容不为空的文件

十、不区分大小写查找

-iname filename  #查找文件时,不区分大小写

举例:不区分大小写查找links.sh

 

十一、按照文件大小查找文件

-size  [+|-]#UNIT  #通过文件大小查找文件,常用单位k,M,G,c(byte)

size的范围指定如下:

6k  #表示范围是:(6-1)k<size=6k

+6k  #表示的范围是:6k<size

-6k  #表示的范围是:0k<<size<<(6-1)k

举例:分别执行查找范围为6k、+6k、-6k的命令

十二、按时间戳查找文件

time  #以“天”为单位

min  #以“分钟”为单位

-atime TIME  #表示查找文件的时间戳范围是:小于TIME+1天,大于等于TIME天

-atime +TIME  #表示查找文件的时间戳范围是:TIME大于等于TIME+1天

-atime -TIME  #表示查找文件的时间戳范围是:TIME大于等于0小于TIME天

举例:按时间戳查找文件

 

第一条命令查找文件的时间戳范围是:文件的创建时间大于21分钟的文件

第二条命令查找文件的时间戳范围是:文件的创建时间小于20分钟的文件

同样atime、mtime、ctime、amin、mmin等使用方法通上

十三、按文件权限查找文件

-perm  #通过权限查找文件

-perm mode  #精确匹配mode权限

-perm /mode  #任何一类(用户权限、组权限、其他权限)对象中,只要有一项匹配,即表示符合匹配规则

-perm -mode  #每一类对象中,都必须同时拥有指定的权限

0  #表示匹配规则时,不予关注

权限匹配规则:将权限以二进制展开,与mode进行匹配,如展开的二进制位数值为0,则表示不需要进行规则匹配,如为1则需要进行规则匹配

举例:-perm /mode

文件权限为:003  二进制展开为:00,00,11

mode权限为:222  二进制展开为:10,10,10

上图中,属主和属组的权限和mode都不匹配,其他权限和mode中的其他权限,进行二进制展开,因为mode其他权限的二进制为10,最后一位为0,则不需要去进行匹配,只匹配为1

的位,而文件权限中的其他权限的二进制为11,所以第二位1和mode的第二位1匹配成功。从而匹配了权限规则

举例:-perm -mode

 

此处和/mode一样,文件权限展开二进制为:111,111,111

mode权限展开二进制为:011,011,011

去掉0的权限位,文件权限和mode权限匹配

十四、find的处理文件的动作

-print  #默认动作,意为将查找结果输出到屏幕

-ls    #对查找到的文件执行ls -l命令

-delete  #对找到的文件执行删除操作

-ok command {} \;  #对找到的文件执行后面命令的操作,会交互式询问用户是否执行该命令

-exec command {} \;  #对找到的文件执行后面命令的操作,不会交互式询问用户是否执行命令

举例:对找到的文件进行添加bak后缀的操作

 

上图中{}意为找到的结果,即time文件

 

使用-exec参数意味着执行删除动作时,不进行交互式询问

posted on 2020-01-14 15:47  ꧁༺乘风、破浪༻꧂  阅读(311)  评论(0编辑  收藏  举报

导航