find:通过遍历指定的目标目录,实时查找符合指定属性的文件
优点:精确匹配进行查找
缺点:速度略慢
用法:
find [OPTION] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径
查找条件:默认为指定路径下的所有文件
处理动作:默认是在屏幕显示出来
查找条件:
-name:查找时区别文件大小写,支持glob
*,?,[],[^]
-iname:查找时不区分文件大小写
-user USERNAME:根据文件属主查找
-group USERNAME:根据文件属组查找
-uid UID:根据指定的UID查找
当原有的用户被删除时,他之前所创建的文件的属主属组,变成他之前帐号的uig和gid
-gid GID:根据指定的GID查找
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
-type TYPE:根据文件类型查找
-size TYPE:根据文件大小查找
-atime [+|-]#:最近几天访问过的文件
-mtime[+|-]#: 最近几天修改过的文件
-ctime[+|-]#: 最近几天改变的文件
-amin[+|-]#: 最近几分钟内访问过的文件
-mmin[+|-]#: 最近几分钟内修改过的文件
-cmin[+|-]#: 最近几分钟内改变过的文件
-perm [+|-]MODE:根据权限查找
-maxdepth: 查找最在深度,例:-maxdepth 1表示只在当前目录下找,而不去找当前目录下的目录
-mindepth: 查找最小深度
组合查找条件:
-a:与 当不带此参数,同时有2个操作时也表示与
-o:或者
!, -not:非
根据文件类型查找
-type TYPE:
f:普通文件
d:目录文件
l:符号链接文件
b:块设备
c:字符设置文件
p:命令名管道
s:表示套接字文件
根据文件大小查找
-size TYPE:
常用单位:k,M,G
+;大于
-;小于
什么都不带表示为精确的大小
#UNIT:表示 #-1< x <=# 以2k为例;2-1< x <=2 查找的是0大于1k和小于等于2k的所有文件都符合
-#UNIT:x <= #-1 以2k为例:x <= 2-1查找的是小于等于1k的所有文件
+#UNIT:x > # 以2k为例:x > 2查找的是大于2k的所有文件
根据时间戳查找:
以“天”为单位:
-atime [+|-]#:最近几天访问过的文件
# <= x < #+1
比如想要查找3天前访问的文件 -atime 3
输出的结果应该为大于等于3天,小于4天的内容
-#: x < #
+#:x >= #+1
-mtime[+|-]#:最近几天修改过的文件
-ctime[+|-]#:最近几天改变的文件
以“分钟”为单位:
-amin[+|-]#:最近几分钟内访问过的文件
-mmin[+|-]#:最近几分钟内修改过的文件
-cmin[+|-]#:最近几分钟内改变过的文件
根据权限查找:
-perm [+|-]MODE:
MODE:精确匹配权限
例:find ./ -perm 755 #查找指定权限为755的文件
/MODE(在centos6,7上面用/号,表示+号):任何一类用户的权限只要包含对其指定的任何一位权限即可
例:600权限 随便匹配一类就可以,要么属主是6,要么属组是0,要么其它是0,都匹配
-MODE:每一类用户的权限都包含对其指定的所有权限,与权限
例:找到后缀为txt的文件,并且具有执行的文件(u,g,o任意一个具有x的都可以)
#find ./ -name "*.txt" -a -perm /a+x
找到后的处理操作:
-print:默认动作,打印至屏幕
-delete:删除查找到的文件
-ls:显示找到的文件的详细属性
-fls /path/to/somewhere:查找到的所有文件的长格式信息保存至指定文件中;
-exec COMMAND {} \;执行其它的操作,没有交互,直接进行操作
{}:表示找到的文件名
{}:用于引用查找到的文件名称自身
-ok COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令;在执行命令前会进行交互式提示
例:find ./ -name "*.txt" -a -perm /u+x -ok rm -rf {} \;(在执行命令前进行提示)
注意:find命令会一次性找到所有符合条件的文件,并一同传递给后面的命令,如果后面的命令不能接收较长的参数时,会报错;解决办法用xargs命令一条一条的传递给COMMAND,而不同时传递
用法实例:
例1:同时查找2个文件
find ./ -name "3.log" -o -name "4.log"
例2:同时排除2个文件
find ./ ! \( -name "3.log" -o -name "4.log" \)
find ./ ! -name "3.log" -a ! -name "4.log"