find

格式:find [参数] [路径] [条件] [处理动作]

指定搜索目录层级

find -maxdepth 2 #指定最大递归搜索
find -mindepth 2 # 最小搜索层级

指定搜索次序

find -depth #从子文件搜索,从后往前搜索

根据文件名和inode查找

find -name filename		# 默认精确查找,如:*, ?, [], [^],通配符要加双引号引起来

find -ls			# 显示符合条件文件目录属性信息

find -iname filename 		# 忽略文件名大小写

find -inum n 			# 按inode号查找文件

find -samefile filename 	# 查找inode号相同的文件

find -links n 			# 链接数为n的文件

find -regex “PATTERN” 		# 支持正则表达式,以PATTERN匹配整个文件路径,而非文件名称



#########################################
#	inode: 文件权限属性                 #
#	block: 文件的实际数据               #
#	ll -i # 可以查询inode号             #
#########################################

根据属主属组查找

find -user <USERNAME>			查找属主为指定用户(UID)的文件

find -group <GRPNAME>			查找属组为指定组(GID)的文件

find -uid <UserID>			查找属主为指定的UID号的文件

find -gid <GroupID>			查找属组为指定的GID号的文件

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

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

根据文件类型查找

find -type [文件类型]
 
支持文件类型如下
f	普通文件
d	目录文件
l	符号链接文件
s	套接字文件
b	块设备文件
c	字符设备文件
p	管道文件

查找空文件或目录

find -empty 查找指定目录下空文件和空目录

组合条件

-a 与
-o 或
! 非

排除指定目录

find -path [指定目录] -a -prune	-o [其他条件]		

指定目录通过-prune参数裁剪掉,移除

根据文件大小查找

find -size [+/-][大小munber]		按照指定大小范围查找文件

常用大小单位: byte, c(小写), k(小写), M(大写), G(大写),注意字母大小写,默认查找大小单位为 "k"
find -size [munber]		查找文件大小范围为 (munber -1 , munber]
find -size 5k			查找文件大小范围为 (4,5]k

find -size -[munber]	查找文件大小范围为 [0 , munber -1]
find -size -5k			查找文件大小范围为 [0,4]k

find -size +[munber]	查找文件大小范围为 ( munber , 无穷]
find -size +5k			查找文件大小范围为 (5,无穷]k

根据时间查找

以"天"为单位
find -atime	[+ / - ]day
find -mtime	[+ / - ]day
find -ctime [+ / - ]day

以"分钟"为单位
find -amin [+ / - ]min
find -mmin [+ / - ]min
find -cmin [+ / - ]min

根据文件权限查找

find -perm [/|-]MODE

find -perm MODE		精确权限匹配
find -perm /MODE	任何一类(u,g,o)对象的权限中只要能一位匹配即可,或的关系,+ 从CentOS 7开始淘汰
find -perm -MODE	每一类对象都必须同时拥有指定权限,与关系
0 表示没有权限

find处理动作

find -print				  #find命令默认处理动作参数,把查找文件打印的屏幕上
find -ls				  #类似于对查找到的文件执行“ls -l”命令
find -fls PATH			   #查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
find -delete			   #删除查找到的文件,不做任何提示,"慎用!"
find -ok COMMAND {} \; 		#对查找到的每个文件执行由COMMAND指定的命令处理,对于每个文件执行命令之前,"都会交互式要求用户确认"
find -exec COMMAND {} \; 	#对查找到的每个文件执行由COMMAND指定的命令处理
find命令中"{}"表示引用查找到的文件名称自身,"注意: -ok参数和-exec参数后面必须跟 \;"

xargs 默认把多行信息转化为一行显示

xargs		
[root@centos7 /data ]# seq 10|xargs
1 2 3 4 5 6 7 8 9 10

xargs -n	指定接收信息以几行为一行显示
[root@centos7 /data ]# seq 10|xargs -n2
1 2
3 4
5 6
7 8
9 10

xargs -d	定义分割符
[root@centos7 /data ]# echo "nameXnameXnameXname" | xargs -dX
name name name name

xargs -i 	配合{}改变xargs传入参数位置
比如: 移动文件格式是 mv 文件 移动目标目录,xargs默认把参数传入命令最后
cd /etc/ && find -name '*.conf' | xargs -i cp {} /data/

xargs -p	交互式执行命令
[root@centos7 /data ]# seq 10| xargs -p -i echo {} a
echo 1 a ?...y
1 a
echo 2 a ?...y
2 a