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参数意味着执行删除动作时,不进行交互式询问
原文出处:https://www.cnblogs.com/awanderer/p/12193867.html
来源:oschina
链接:https://my.oschina.net/u/4392184/blog/3242115