1、简介
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

find:
实时
精确
支持众多查找标准
遍历指定目录中的所有文件完成查找,速度慢

2、语法
find [options][查找路径][查找条件][处理动作]

 查找路径:默认为当前目录
 查找条件:默认为查找指定路径下的所有文件
 处理动作:默认为显示

2.1查找条件:
根据文件名查找
-name "文件名称": 支持使用globbing
*
?
[ ]
[^]
-iname "文件名称": 查找时不区分字符大小写

根据属主查找
-user UserName

根据属组查找
-group GroupName
-uid UID
-gid GID
查找没有属主的文件
-nouser
查找没有属组的文件
-nogroup

eg:
   # find /etc/ -name "*passwd*"
   # find /etc/ -iname "*passwd*"
   # find /tmp -user hadoop
   # find /tmp -group hadoop
   # find /tmp -uid 500
   # find /tmp -gid 500

组合条件:
-a: 与,同时满足 !!![默认-a选项]!!!
-o: 或,
-not,!: 非,取反 [取反或变与、与变或] 与的优先级高于或

非A, 并且 非B: 非(A或B)
非A,或 非B: 非(A且B)

eg:
   # find /tmp -nouser
   # find /tmp -nouser -o -user hadoop
   # find /tmp -user hadoop -name "*.txt"    查找属主hadoop并且文件名以txt结尾的文件
   # find /tmp -user hadoop -not -name "*.txt"     表示取反
   # find /tmp -not -user hadoop -not -name "*.txt"     即不也不
   # find /tmp -not \( -user hadoop -o -name "*.txt" \) ##  
   # find /tmp -not -user hadoop -o -not -name "*.txt"  即是也是  
   # find /tmp -not \( -user hadoop -a -name "*.txt" \) ##

根据文件类型查找
类型参数列表:
-type: 文件类型
f: 普通文件
d: 目录
b: 块设备
c: 字符设备
l: 符号链接文件
p: 命名管道
s: 套接字
...
文件大小单元:
b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节

eg: 
   # find /var/log/ -size +1M    查找大于1M的文件
   # find /var/log/ -size -1M    查找小于1M的文件

根据时间戳查找
以天为单位(time):
-atime [+|-]#
-mtime
-ctime
...
以分钟为单位(min):
-amin
-min
-cimin
find 命令_第1张图片
+: 表示 (#+1)天之外被访问过
-: 表示 #天之内被访问过
无符号: 表示短于(#+1) >x>=#天的时间段被访问过
-atime: 指定时间曾被存取过的文件,意思是文件被读取过
-mtime: 指定时间曾被改动过的文件,意思是文件內容被修改过
-ctime: 指定时间曾被更改过的文件,意思是文件权限被更改过

eg:
   # find /var/log -atime -1    查找/var/log 最近一天内访问过的文件

根据权限查找
-perm [+|-]MODE
MODE: 精确匹配
+MODE: 任何一类用户的任何一位权限匹配
-MODE: 每类用户的指定要检查的权限位都匹配
...
文件权限: 644
-perm 600: 否
-perm +222 任何一个有
-perm -222 所有都有

eg:
   # find / -type f -perm +001
   # find / -type f -perm -444

2.2处理动作:
-print: 打印在标准输出上
-ls: 长格式输出各文件信息
-exec COMMAND {} \; 对查找到的文件执行指定的命令
-ok COMMAND {} \; 交互式的 -exec
{}: 占位符

eg:
   # find /tmp/ -perm -003 -type f -ls     查找其它用户有写权限和执行权限的并且文件类型为普通文件的
   # find /tmp/test -perm -003 -type f -exec ls -l {} \;    [如果一次查找的文件非常多,会由于传递参数过多而导致命令溢出的]

3.总结
find [查找路径] [查找条件] [动作]
-name, -iname, -user, -group, -uid, -gid, -nouser, -nogroup, -size, -type, -atime, -perm,
-exec, -ok, -ls
其中 {} 代表当前查到的符合条件的文件名,\;则是语法格式
...
find把查找到的所有文件一次性地传递给-exec所指定的命令
find | xargs COMMAND 把前面命令执行结果,当做后面命令的执行参数去使用
| xargs COMMAND == ``命令替换 |管道命令传递的结果是字符串,只能做文本处理;如果当做文件处理需要用命令替换