find命令

find用于搜索文件名称,其一般格式为:find pathname -expressions

1. find常用表达式

find的表达式分为三类:选择表达式、条件表达式、操作表达式。

表达式 类型 用途 举例
-mount 选择表达式 用于防止find命令的搜索范围超出当前文件系统的边界,返回值常为true (1)
-group gid或组名 条件表达式 检查当前的文件是否具有与grp相同的gid或组名 (1) find . -group hwg -print
-name pattern 条件表达式 检查文件名和模式pattern是否相同,pattern可以用正则表达式给出,必要时使用引号 (1) find . -name 'abc*' -print
-type t 条件表达式 检查当前文件的类型是否是t。t的值:d表示目录,f表示普通文件,l表示符号连接 (1) find . -type f -print
-user uid或用户名 条件表达式 检查当前的文件所有者是否为uid或usr (1) find . -user hwg -print
-mtime [+-=]n 条件表达式 检查文件的修改日期 (1) find . -mtime -4 -print,打印在4天内修改过的文件
(2) find . -mtime +4 -print,打印在4天之前修改过的文件
(3) find . -mtime 4 -print,打印在4天前修改过的文件
-size [+-=]n 条件表达式 检查文件的大小 (1) find . -size +5000k -exec ls -lh {} ; 打印文件大小大于5MB的文件的具体信息
-exec cmd 操作表达式 用来执行cmd命令。
如果要将当前的文件名传送给命令,应该加{}标记 ,分号用来表示cmd结束,并和后面可能出现的表达式分开
(1) find . -group hwg -exec echo {} ; -print
-print 操作表达式 将当前的文件名送到标准输出设备显示 (1) find . -print 等价于 find,表示打印当前目录(.)下的所有文件

注意:
(1) 如果没有给出pathname,默认为当前工作路径(.)
(2) 如果没有给出操作表达式,默认是-print

2. find的逻辑表达式

支持熔断操作

逻辑表达式 描述
e1 -a e2 与运算
e1 e2 等价于e1 -a e2
e1 -o e2 或运算
e1, e2 逗号运算
!e1 取反运算

注意:
区别以下两条命令,涉及逻辑运算符的优先级

命令 用途
find . -name '[Aa]*' -o -name '*[Aa]' -print 等价于find . \( -name '[Aa]*' \) -o \( -name '*[Aa]' -a -print \)
find . \( -name '[Aa]*' -o -name '*[Aa]' \) -print 符合意图:输出以A(或a)开头或以A(或a)结尾的文件

3 小测试

统计在/etc为起点的目录树中,文件内容包含字符串'telnet'(不区分大小写)的文件的数目。

find /etc -type f -exec grep -li 'telnet' {} \; | wc -l
posted @ 2017-02-10 20:22  west000  阅读(158)  评论(0编辑  收藏  举报