一、简介
find命令用来在指定目录下查找文件。任何位于参数以前的字符串都将被视为欲查找的目录名。若是使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。而且将查找到的子目录和文件所有进行显示。ide
find:
实时
精确
支持众多查找标准
遍历指定目录中的全部文件完成查找,速度慢oop
二、语法
find [options][查找路径][查找条件][处理动做]ui
查找路径:默认为当前目录 查找条件:默认为查找指定路径下的全部文件 处理动做:默认为显示
2.1查找条件:
根据文件名查找
-name "文件名称": 支持使用globbing
*
?
[ ]
[^]
-iname "文件名称": 查找时不区分字符大小写code
根据属主查找
-user UserNameblog
根据属组查找
-group GroupName
-uid UID
-gid GID
查找没有属主的文件
-nouser
查找没有属组的文件
-nogrouphadoop
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,!: 非,取反 [取反或变与、与变或] 与的优先级高于或ci
非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 —— 吉字节it
eg: # find /var/log/ -size +1M 查找大于1M的文件 # find /var/log/ -size -1M 查找小于1M的文件
根据时间戳查找
以天为单位(time):
-atime [+|-]#
-mtime
-ctime
...
以分钟为单位(min):
-amin
-min
-cimin
+: 表示 (#+1)天以外被访问过
-: 表示 #天以内被访问过
无符号: 表示短于(#+1) >x>=#天的时间段被访问过
-atime: 指定时间曾被存取过的文件,意思是文件被读取过
-mtime: 指定时间曾被改动过的文件,意思是文件內容被修改过
-ctime: 指定时间曾被更改过的文件,意思是文件权限被更改过io
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 == ``命令替换 |管道命令传递的结果是字符串,只能作文本处理;若是当作文件处理须要用命令替换