find命令是用来在给定的目录下查找符合给定条件的文件
find [OPTIONS] [查找起始路径] [查找条件] [处理动做]
1、OPTIONS参数
-P、
-L、-H:控制软链接的对待方式,用的很少。不介绍了
2、查找路径
就是个目录路径,相对和绝对均可以。
3、查找条件
(一)、根据名称查找
-name "PATERN"
-iname "PATERN" :不区分名称字母大小写
-regex PATTERN:基于正则表达式的模式查找,匹配的是整个路径,而非单个文件名。
(二)、根据文件从属关系查找:
-user USERNAME:查找属主指定用户的全部文件;
-group GRPNAME:查找属组指定组的全部文件;
-uid UID:查找属主指定的UID的全部文件;
-gid GID:查找属组指定的GID的全部文件;
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
(三)、根据文件的类型查找:
-type:根据不一样的文件类型筛选
f |
普通文件 |
d |
目录文件 |
l |
符号连接文件 |
b |
块设备 文件 |
c |
字符设备文件 |
p |
管道文件 |
s |
套接字文件 |
(四)、根据文件的大小查找:
-size [+|-]#UNIT
经常使用单位:k, M, G
#UNIT:(#-1, #]
-#UNIT:[0,#-1]
+#UNIT:(#, oo)
一、1k时:a3只有15个字节,也被算作1k也查询,即条件符合大于0k ( #-1 ),小于等于1k (#)
二、+1k时:a和a1知足大于1k(#)的条件
三、-62k时:只有a3知足大于等于0,小于等于 61k(#-1)的要求。
(五)、 根据时间戳查找:
按照atime(文件的最后访问时间)、mtime(文件的最后修改时间)、ctime(文件最后改变时间)三个变量来查询:
以天为单位,
-atime [+|-]#
#:[#, #-1) :最后访问时间在#天前(大于等于#天前,小于#-1天前)
等价于最后访问时间与当前的时间差 大于 (#-1)*24小时,小于等于 #*24小时
-#:(#, 0] :最后访问时间在#天之内,不包括24小时前的那一刻。
等价于最后访问时间与当前的时间差小于 #*24小时
+#:(oo, #-1] :最后访问时间在#-1天之前的。包括#-1天前
等价于最后访问时间与当前的时间差大于等于 #*24小时
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
-daystart:时间条件的开始先决条件。若是没有的时候,比较的开始时间为当前时间。若是有此参数,则比较的开始时间为当天的23:59:59。
查询出来的各个文件名称对应时间以下:
文件名 |
修改时间 |
服务器当前时间 |
09/08 17:34 |
a |
09/08 17:20 |
b |
09/07 12:20 |
c |
09/08 13:20 |
d |
09/07 22:20 |
(六)、根据权限查找
-perm
-perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即知足;9位权限之间存在“或”关系;
-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即知足。9位权限之间存在“与”关系;
看案例:
(1):精确查找。就是匹配权限值彻底相等的;
(2):/mode。 只要有一组用户匹配到一个权限便可。
通俗说:就是属主拥有给定属主权限的某一个,或者数组拥有给定权限的某一个,或者其余用户拥有给定权限的某一个便可。
表示属主拥有执行权限
或者数组拥有写权限,
或者其余用户拥有写权限
(3):-mode。而且的关系。
通俗说:就是给定的属主权限必须拥有。而且给定的数组权限必须拥有。而且给定的其余用户权限必须拥有。
表示属主拥有执行权限
而且数组拥有写权限,
而且其余用户拥有写权限
处理动做:
-print:输出至标准输出;默认的动做;
-ls:相似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
-delete:删除查找到的文件;
-fls /PATH/TO/SOMEFILE:把查找到的全部文件的长格式信息保存至指定文件中;
-ok COMMAND {} \; :对查找到的每一个文件执行由COMMAND表示的命令;每次操做都由用户进行确认;
-exec COMMAND {} \; :对查找到的每一个文件执行由COMMAND表示的命令;
注意:find传递查找到的文件路径至后面的命令时,是先查找出全部符合条件的文件路径,并一次性传递给后面的命令;
可是有些命令不能接受过长的参数,此时命令执行会失败;另外一种方式可规避此问题:
find | xargs COMMAND