day 17 find命令详解

find 的基本概述

可以根据文件的名称、文件大小、文件的修改时间、文件的类型、
文件的权限、文件的属主属组、文件的目录层级进行查找 

Find的语法:
命令		路径       选项       表达式       动作  
查找		地区       妹子	      18-25       约

find中特殊符号说明:

        .               # 在find中没有特殊意思就是自己本身符号.

	*		# 所有

	?		# 匹配任意一个字符  只能匹配一个 
	
	[]		# 匹配中括号中的任意一个字符 
	
	[^]		# 排除中括号中的字符

linux常用通配符详细链接

一,name根据文件名称查找

选项:
	-name		# 根据名称查找 
	-i		# 忽略大小写    -iname

实例:

[root@localhost ~]# find ./ -name 1.txt  # 根据文件名在当前目录下查找1.txt

二,type根据文件类型查找

选项:

	  -type		# 根据类型进行查找 
	
		f		# 普通文件  
		
		d		# 目录
		
		l		# 软链接
		 
		s		# 套接字 socket文件
		
		p		# 管道文件
		
		b		# 块设备  硬盘 硬盘分区  镜像光盘
		
		c		# 字符设备 
		
#  查找所有的普通文件,包括隐藏文件,也包括自己本身 

实例:

#  查找当前目录下类型为普通文件的文件(包括隐藏文件也查找出来)
[root@localhost ~]# find ./ -type f 
./file8
./.bash_logou

三,size根据文件的大小查找

选项:

	-size		# 根据文件大小查找 
	
	+n		# 大于
	
	-n		# 小于
	
	 n		# 精确匹配 
	
	c b  k  M  G		#  单位 
#  按文件大小查找的时候 会进位匹配 比如按m查找的时候不足一兆的也算1兆
#  像1.1兆也算两兆 或者3.1算4兆 依次类推

实例:

#  匹配小于1k的文件
[root@localhost ~]# find ./ -type f -size -1k 
./file8
./file9

四,mtime根据文件的时间查找

选项:

	-mtime  		# 最后修改时间 
	
	+n			# 多少天以前 
	
	-n			# 多少天以内
	
	 n			# 具体某一天 


五,perm根据文件的权限查找

选项:

	-perm		# 根据权限查找 
	
	-421		# 包含这些权限 
	
	421		# 精确匹配  
	
	/421		# 包含其中的某个权限   三个身份中满足一个则匹配
	
	!	        # 取反  

实例:

#  查找/etc目录下所有用户都没有写权限的文件 
find /etc/ -type f ! -perm /222 -ls  
# /222表示三个身份中满足一个写权限则匹配 
# 加!相反的意思就是只要有一个用户有写权限则不匹配(刚好满足题意)
# 此题有点绕 好好想想应该能理解出来
 

#  查找/etc目录下至少有一类用户没有写权限的文件
find /etc/ -type f ! -perm 222  # 222 表示精确匹配三个身份都要满足有写权限
#  取反的意思就是至少有一类用户没有写权限的文件就匹配

六,user group根据文件的属主属组查找


选项:

	-user		# 根据属主
	
	-group		# 根据属组选项:

	-user		# 根据属主
	
	-group		# 根据属组
	
	-nouser		# 没有属主
	
	-nogroup	# 没有属组
	
	-nouser		# 没有属主
	
	-nogroup	# 没有属组

实例:

# 在根下查找 属主是root 或者 属主是test 用户的文件 只要满足一个条件则匹配
find / ( -user root -o -user test ) 
# -o或则要用()包起来跟其他选项区分 不加()有时候容易混淆

七 maxdepth根据文件的目录层级查找

选项:

	-maxdepth	# 最大的目录层级  	

实例:

#  在根目录下查找文件名字为'hostname'的文件最大的目录层级不能超过两层
find / -type f -maxdepth 2 -name 'hostname'

八,motion 根据动作来执行

动作(放在文件的最后):

-print		# 默认的动作 打印你所查找出来的文件的名称 


-ls		# 把查找出来的文件以长格形式显示出来文件的详细信息  


-delete		# 把查找出来的文件进行删除  只能删除空目录 


-exec		# 后面加自定义的shell命令

实例:

# 在根目录下查找包含test昵称的文件名并删除
find / -type f -name '*test*' -exec rm -f {} ;
# -exec 找到的文件执行shell命令 {}表示前面匹配到条件的文件  
# ;转义分隔符 表示命令的结束 不转移在-exec动作眼里表示shlle命令语句还没有写完


十,find跟xargs命令的配合

# finde 命令执行后的结果通过管道交给后面的命令执行需要用到xargs支持
原文地址:https://www.cnblogs.com/xiaolang666/p/13388362.html