之前介绍过grep和egrep文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。现在要为大家介绍的是常用的文件查找工具find命令。
1. 文件查找概述
根据文件的各种属性去找到相对应文件
文件查找:locate, find
实时查找:遍历所有文件进行条件匹配
非实时查找:根据索引查找
locate: 非实时查找
依赖于索引,而索引构建相当占用资源;索引的创建是在系统空闲时由系统自动进行(每天任务);手动进行使用updatedb命令;
查找速度快
非精准查找
模糊查找
find: 实时查找
精准查找
速度慢
2. find命令详解
2.1 命令格式
find [option]...[查找路径] [查找条件] [处理动作]
查找路径:默认为当前目录
查找条件:默认为指定路径下的所有文件
处理动作:默认为显示至屏幕
2.2 条件查找
-name "文件名称":支持使用globbing字符
*:
?:
[]:
[^]:
Eg:find -name"*.pl"
./pp/1.pl
./pp/3.pl
./pp/2.pl
./a.pl
# find -name *.pl
./a.pl
注意:如果用引号引起来,那么就成了递归。如果不用引号,那么就不是递归
-iname "文件名称":查找时忽略字符大小写
-user USERNAME: 根据文件的属主查找
-group GRPNAME: 根据文件的属组查找
-uid UID: 根据文件的属主id查找
-gid GID: 根据文件的属主id查找
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件
2.3 组合条件查找
与:-a, 同时满足
或:-o, 满足一个即可
非:-not, !,条件取反
eg:
find ./ �Ciname “*s” -not �Cusergentoo �Cls
find ./ -not -iname“*s” -not �Cuser gentoo
多个not直接跟ls会有歧义
ls -l ` find ./ -not �Ciname “*s” -not -user gentoo`
例子:-not \( -iname "*r* -o -user gentoo \)
-iname "*r* -o -user gentoo要和前后的\)有空格
-not A -a -not B= -not ( A -o B )
//将not提取到前面要将-o或者-a反转
-not A -o -not B= -not ( A -a B )
2.4 文件类型查找
-type TYPE
f: 普通文件
d: 目录文件
l: 符号链接
b: 块设备
c: 字符设备
s: 套接字文件
p: 命名管道
-size [+|-]#UNIT:根据文件大小去查找
常用单位: k, M, G
-#UNIT: x <= #-1
#UNIT: #-1 < x <= #
+#UNIT: x > #
Eg: find / -size -2k 查找文件大小小于等于1k字节的文件
find / -size 2k 查找文件大小大于等于1k字节,小于2k的文件
find / -size +2k 找文件大小大于2k字节的文件
2.5 根据时间戳查找
以“天”为单位
-atime[+|-]#
-#:x < # #天之内
#: # <= x <#+1 #天和#+1天之间
+#:x >= #+1 #+1天以前被访问
-mtime
-ctime
以“分钟”为单位
-amin
-mmin
-cmin
2.6 根据权限查找
-perm [+|-]MODE
MODE: 与MODE精确匹配
find./ -perm 644
+MODE: 任何一类用户的权限只要能包含对其指定的任何一位权限即可(9位有一位重合即可);以属主为例,
find./ -perm +222
-MODE:每类用户指定的检查权限都匹配:
为三类用户所有指定的检查权限都能够被包含
find./ -perm -222
2.7 处理动作
-print: 默认处理动作,显示
-ls:类似于ls -l
-exec COMMAND {} \; // {}与\;要隔开
-ok COMMAND {} \; //交互式的,执行时会进行确认
eg:find ./ -perm 002 -exec chmod o-w {} \;
find ./ -perm +200 �Ca �Ctype �Ca�Cnot �Cname “*” �Cexec ls �Cl {} \;
find ./ -perm +200 �Ca �Ctype �Ca�Cnot �Cname “*” �Cexec mv {} {}.txt \;
find: 一次性查找符合条件的所有文件,并一同传递给给-exec或-ok后面指定的命令;但,有些命令不能接受过长的参数;此时使用另一种方式
find | xargsCOMMAND