0) 简介
与之前一篇grep不同的是find属于文件属性匹配查找,
find命令相比之前的师兄locate来说优势明显,当然
这些都是建立在伟大的摩尔定律之上,对于处理器性能
不在是瓶颈时,如何让搜索变得更加精确,更具有定义
化便是find出先的意义
1) 查找分类
Usage: find [查找路径] [查找条件(支持通配符)] [处理动作]
find . -name Ops
a) 文件及文件权限查找
-name 根据文件名匹配文件
1
2
|
# 搜索 /etc 目录下文件名为 fs 开头的所有文件
find
/etc
-name f*
|
需要注意这里会搜索子目录
1
2
3
|
# 指定最大深度之后,对文件的遍历只会
# 有一层(也就是当前目录)
find
/etc
-maxdepth 1 -name f*
|
-iname 忽略文件名大小写匹配
1
2
|
# 忽略大小写查找,至于中文嘛,不解释 : )
find
/etc
-iname s*
|
-type 与shell中文件测试类型相同
f 查找的文件位普通文件(不包括目录)
1
|
find
~ -
type
f
|
d 查找的文件类型为目录(不包括普通文件)
1
|
find
~ -
type
d
|
b 查找的文件类型为块设备文件
1
|
find
/etc/dev
-
type
b
|
c 查找的文件类型为字符设备文件
l 查找的文件类型为链接文件
p 查找的文件类型为管道文件
s 查找的文件类型为socket文件
-size 根据文件大小进行查询
1
2
|
# 文件查询结果很像时间查询
# 具体请查阅时间查询
|
-perm 根据linux文件权限系统查找
1
2
3
4
5
6
|
# 如上图 +755 的条件可以匹配4种不同权限的文件
#+755 3个权限位任意一位对应ugo都可以
find
/ -prem +755
# 如上图右 -755 的条件只能匹配 755 权限的文件
#-755 每一位权限必须完全匹配查找的文件
find
/ -prem -755
|
b) 用户或用户组
-user 根据文件的属主来查询
1
|
find
. -user openstack
|
-group 根据文件的属组查询
1
|
find
. -group openstack
|
-uid根据文件的属主id查询
1
|
find
. -uid openstack
|
-gid 根据文件的数组id查询
1
|
find
. -gid openstack
|
-nouser 文件或目录没有属主
-nogroup 文件或目录没有属组
c) 时间查询
-atime 查找访问时间在某天范围内的文件
1
|
find
. -atime +4 大于三天之前的文件
|
(此时要查找的文件访问时间大于72小时)
1
|
find
. -atime -4 小于三天之内的文件
|
(此时要查找的文件访问时间小于48小时)
1
|
find
. -atime 4 正好第三天的文件
|
(此时要查找的文件访问时间在48<m<72)
-mtime查找修改时间在某天范围内的文件
-ctime查找创建时间在某天范围内的文件
-amin访问分钟
-mmin修改分钟
-cmin创建分钟
d) 组合查询
-a 并且
1
2
|
# 查找/etc/目录下大于1M且类型为普通文件的所有文件;
find
/etc/
-size +1M -a -
type
f |
xargs
ls
-lh
|
-o 或者
1
2
|
# 查找当前系统上没有属主或属组文件;
find / \( -nouser -o -nogroup \)
|
-not 非
1
2
|
# 查找/etc/目录下至少有一类用户没有写权限;
find
/etc/
-not -perm -222
|
e) 其他操作
查找到文件之后执行什么操作,都在这最后了 :)
find . -type f [ -print ] 这便是find
的默认动作,实现与打印当然我们可能会执行一
些其他的-ls,-exec,-ok
实例:
1
2
3
4
5
6
7
8
|
同样都是将查找结果管道给下一个操作
xargs
的好处就是查找的结果序列不会
一次分配到内存,这样按需获取提高程序
的执行效率
# 配合其他类型的查找
find
. -mtime 4 -
exec
ls
-ld {} \;
# 将所匹配的文件改名备份
find
. -mtime 4 -
exec
mv
{} {}.bak \;
|