Linux文件查找find命令


作用:实时查找工具,通过遍历指定路径完成问件查找,递归地在层次目录中处理文件

find搜索目录树上的每一个文件名,它从左至右运算给定的表达式,按照优先规则进行匹配,直到得出结果(左边运算在’与’操作中得出假,在’或’操作中得出真),然后 find移向下一个文件名。

第一个以 '- ', ‘(’ , ‘)’ , ‘,’ 或 ‘!’ 这些字符起始的参数是表达式的开始;在它之前的任何参数是要搜索的路径,在它之后的任何参数都是表达式的余下部分。如果没有路径参数,缺省用当前目录。如果没有表达式,缺省表达式 用 ‘-print’

当所有文件都成功处理时 find 退出并返回状态值0。如果发生错误则返回一个大于0的值。

特点:精确查找,实时查找
可能只搜索用户具备读取和执行权限的目录
查找速度略慢

格式:find 目录 选项 动作

目录:/,/etc,/var,/home之类都是
选项:
	搜索目录层级
		-maxdepth level :最大搜索目录深度
		-mindepth level :最小搜索目录深度
	-name filename :根据文件名匹配,支持通配符
		例:find /etc -name pa*wd
	-iname :忽略大小写
	-inum :根据iNode节点号查找
	-samefile name :相同iNode号的文件
	-links # :连接数为#的文件
	-regex "pattern" :以模式匹配整个文件路径,而非文件名称
		例:find /data -regex ".*\.sh$"
	根据文件属主和属组查找;
		-user username:查找属主为指定用户的文件
		-group groupname:查找属组为指定组的文件
		-uid useruid:查找属主为指定UID的文件
		-gid groupgid:查找属组为指定GID的文件
		-nouser:查找没有属主的文件
		-nogroup:查找没有属组的文件
	根据文件类型查找:
		-type:				
          b      特殊块文件(缓冲的)
          c      特殊字符文件(不缓冲)
          d      目录
          p      命名管道 (FIFO)
          f      普通文件
          l      符号链接
          s      套接字
	空文件或目录
		-empty
		-type d -empty
	根据文件大小:
		-size:常用单位(K M G c(Byte))
			+#M:表示大于#M的文件,+5M
			-#M:表示小于于#M的文件,-5M
	根据时间查找:
		以天为单位:
			-atime:访问时间
				+,-:+10,超过十天访问过的文件,-10十天内访问过的文件
			-mtime:修改时间,文件内容最后一次修改的时间,文件内容修改
			-ctime:改变时间,文件最后一个改变的时间,属性及文件名改变
		以分钟为单位:
			-amin:访问时间
			-mmin:修改时间
			-cmin:改变时间
	根据文件权限查找:
		-perm:
			mode:精确查找
			/mode:任何一类(u,g,o)对象的权限只要匹配一位就满足条件。或的关系。早期用+号表示			
			-mode:每一类对象都必须拥有指定权限才满足条件
			0:表示不关注
		例:find -perm 755 file,精确匹配权限755的文件
			find -perm /222 file,属主,属组,其他人,其中一个有写权限就匹配
			find -perm -222 file,属主,属组,其他人,必须每个都有写权限就匹配
			find -perm -002 file ,只有其他人有写权限时才匹配
动作:
	-print:默认的处理动作,将匹配到的显示到屏幕
	-ls:类似于ls -l查看文件
	-delete:匹配到的内容删除(危险,不要用)
	-fls file:查找到的文件以长格式信息保存到指定的文件中
	-ok command {} \;  :对查找到的文件,执行由command位指定的命令,缺点是对每个匹配的文件执行命令前都需要确认
		例:find /data -name "*.sh" -ok mv {} /tmp \;
			{}:引用前面find匹配到的文件,引用查找到的文件名称自身,例如匹配的是ping.sh,name{}内就位{ping.sh}
			\;:语法格式,必须以\;结尾
	-exec command {} \; :对查找到的文件,执行由command位指定的命令,和ok不同的是不需要一个一个确认
		例:find /data -name "*.sh" -ok mv {}.bak /tmp \;
			{}.bak:移动到/tmp目录下改名为以.bak为后缀的文件

查找/var/目录下不属于root、lp、gdm的所有文件

[root@centos7 ~]#find /var ! -user root ! -user lp ! -user gdm -type f   
/var/lib/colord/mapping.db
/var/lib/colord/storage.db
/var/lib/nfs/state
/var/lib/unbound/root.key
/var/lib/setroubleshoot/setroubleshoot_database.xml
/var/lib/setroubleshoot/email_alert_recipients
/var/lib/postfix/master.lock
/var/spool/mail/rpc
/var/spool/mail/cheng
/var/spool/mail/ning

叹号表示取反。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值