0) 简介

与之前一篇grep不同的是find属于文件属性匹配查找,

find命令相比之前的师兄locate来说优势明显,当然

这些都是建立在伟大的摩尔定律之上,对于处理器性能

不在是瓶颈时,如何让搜索变得更加精确,更具有定义

化便是find出先的意义


1) 查找分类

Usage: find [查找路径] [查找条件(支持通配符)] [处理动作]

find . -name Ops


a) 文件及文件权限查找

   -name  根据文件名匹配文件

# 搜索 /etc 目录下文件名为 fs 开头的所有文件
find /etc -name f*

   需要注意这里会搜索子目录

find文件查找命令_摩尔定律

# 指定最大深度之后,对文件的遍历只会
# 有一层(也就是当前目录)
find /etc -maxdepth 1 -name f*

   find文件查找命令_名称查询_02

   -iname  忽略文件名大小写匹配

# 忽略大小写查找,至于中文嘛,不解释   : )
find /etc -iname s*

   -type 与shell中文件测试类型相同

       f 查找的文件位普通文件(不包括目录)

find ~ -type f

      d 查找的文件类型为目录(不包括普通文件)

find ~ -type d

      b 查找的文件类型为块设备文件

find /etc/dev -type b

      c 查找的文件类型为字符设备文件

      l 查找的文件类型为链接文件

      p 查找的文件类型为管道文件

      s 查找的文件类型为socket文件

  -size 根据文件大小进行查询

# 文件查询结果很像时间查询
# 具体请查阅时间查询

find文件查找命令_搜索文件_03

   -perm 根据linux文件权限系统查找

     find文件查找命令_摩尔定律_04      

# 如上图 +755 的条件可以匹配4种不同权限的文件
#+755 3个权限位任意一位对应ugo都可以
find / -prem +755
# 如上图右 -755 的条件只能匹配 755 权限的文件
#-755 每一位权限必须完全匹配查找的文件
find / -prem -755


b) 用户或用户组

   -user  根据文件的属主来查询        

find . -user openstack

   -group 根据文件的属组查询

find . -group openstack

   -uid根据文件的属主id查询

find . -uid openstack

   -gid  根据文件的数组id查询

find . -gid openstack

   -nouser  文件或目录没有属主

   -nogroup  文件或目录没有属组


c) 时间查询

find文件查找命令_摩尔定律_05

   -atime  查找访问时间在某天范围内的文件

find . -atime +4 大于三天之前的文件

       (此时要查找的文件访问时间大于72小时)

find . -atime -4 小于三天之内的文件

       (此时要查找的文件访问时间小于48小时)

find . -atime 4 正好第三天的文件

       (此时要查找的文件访问时间在48<m<72)

   -mtime查找修改时间在某天范围内的文件

   -ctime查找创建时间在某天范围内的文件

   -amin访问分钟

   -mmin修改分钟

   -cmin创建分钟


d) 组合查询

   -a  并且

# 查找/etc/目录下大于1M且类型为普通文件的所有文件;
find /etc/ -size +1M -a -type f | xargs ls -lh

find文件查找命令_名称查询_06

   -o  或者

# 查找当前系统上没有属主或属组文件;
find / \( -nouser -o -nogroup \)    

   -not  非

# 查找/etc/目录下至少有一类用户没有写权限;
find /etc/ -not -perm -222

find文件查找命令_摩尔定律_07


e) 其他操作

   查找到文件之后执行什么操作,都在这最后了 :)

   find . -type f [ -print ] 这便是find

   的默认动作,实现与打印当然我们可能会执行一

   些其他的-ls,-exec,-ok

find文件查找命令_find_08

find文件查找命令_名称查询_09


实例:

同样都是将查找结果管道给下一个操作
xargs的好处就是查找的结果序列不会
一次分配到内存,这样按需获取提高程序
的执行效率
# 配合其他类型的查找
find . -mtime 4 -exec ls -ld {} \;
# 将所匹配的文件改名备份
find . -mtime 4 -exec mv {} {}.bak \;