◊基本框架:
a) Find命令一般格式
b) Find 常用表达式:条件表达式和操作表达式
c) find逻辑表达式:与或非
10.1 find命令一般格式
Find pathname –expressions
特点: 1) find 对文件名进行查找,而grep是对文件内容进行查找
2)Find对树形目录层次结构递归搜索
3)当在shell环境下只输入find的话,默认的路径是当前路径,默认的操作表达式是-print
10.2 Find 常用表达式
主要包括两种:条件表达式和操作表达式
1)条件表达式:
-name pattern(最常用)
当文件名与pattern相同时,返回true,否则false
-type t :搜索指定类型的文件
文件类型可以是f(普通文件)、d(目录)、l(符号链接文件)
-user usr
检查当前的文件的拥有者或UID是否是usr
-mtime
-mtime -4 最近4天内修改的文件
-mtime +4 4天前修改的文件
-size
-size +5k 大于5k的
-size -5k 小于5k的
2)操作表达式:
-exec cmd {} \;
-print 打印文件名
例子:搜索当前目录下的所有文件名以txt结尾的文件,然后将其删除,并将其打印出来。
Find . –name ‘*.txt’ –type f -exec rm –f {} \; -print
说明:
{} 表示搜索到的文件列表
\; 分号用来表示一个命令的结束,又因为;对shell来说是特殊的字符,所以要在;号前加上转义字符\
10.3 find逻辑表达式
前面的条件表达式和操作表达式可以通过逻辑运算连接在一起。
e1 –a e2 逻辑与运算,仅当e1为真时,对e2求值
e1 e2 同上
e1 –o e2 逻辑或运算,仅当e1为假时,对e2求值
e1 , e2 逗号表达式,对两个表达式均求值,先e1,后e2
! e1 逻辑非运算
10.4 Find示例
1)将文件名以A/a打头或者以A/a结尾的文件给打印出来
Find . –type f \( -name ‘[Aa]*’ -o –name ‘*[Aa]’ \) -print
2)统计etc目录下所有文件内容包含telnet的文件的个数,其中telnet 不区分大小写。
Find /etc -type f -exec grep –li ‘telnet’ {} \; | wc -l
解释:
l的作用:使grep只输出查找到的文件名。
一个文件名就代表一个文件,有多少个文件名就代表有多少个文件。