linux命令【find】专题

使用find匹配包含某一行的文件、且目标文件类型是文件、size小于2M:

find / -type f -size -2M -exec grep -onHP ‘10.10.87.87’ {} \;

find对于正则表达式的支持:

转载自: www.2cto.com

find的-regex与-name的区别:


1. 与-name, -iname最大的区别就在于 -regex是把find输出的整个结果(有别于绝对路径名)作为要匹配的对象, 而不仅仅是结果的最后一部分

举例

/tmp目录下有且仅有 aaa, aa, 1, 2 这些文件

find -name “a“可以找到

aaa和aa

而find /tmp -regex “a“就不行, 它一个都找不到, 因为找到的每个结果是这样的

/tmp/aaa

/tmp/aa

-name 是对结果中的”aaa”和”aa”这个部分进行匹配, 而-regex却是对完整的

“/tmp/aaa”和”/tmp/aa”进行匹配.

所以你要写作find /tmp -regex “.a.

2. 注意上面的是.而不是

-name所能解释的是基于shell中file glob的匹配字符, 包括:

(1)表示任意长度字符串

(2)?表示任意的单个字符

(3)[set] 表示一个可选字符集合

(4)[^set]或[!set]表示以ASCII为全集对[set] 求补集的一个集合

(5)brace expansion, 即把/tmp/{a,b,c}扩展为三个字串

/tmp/a /tmp/b 和/tmp/c

注意 shell的file globing机制往往不被认为是正则表达式.

-regex接受的是”正统”的正则表达式


这个说起来东西多了, 基本上它跟emacs文档里讲的regex是一样的, 因为find手册里regex的解释部分实际就是链接到emacs 中讲解regex的那个部分. 在上面例子中最大区别就是. 来表示任意长度字符串.



find . -regex “.*[0-9]+” 检查文件名带数字的