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
+: 表示 (#+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 == ``命令替换 |管道命令传递的结果是字符串,只能做文本处理;如果当做文件处理需要用命令替换
原文地址:http://blog.51cto.com/redone/2122728