shell 命令之 find命令二

来源:互联网 发布:欢乐牛牛源码 编辑:程序博客网 时间:2024/06/13 14:58

linux find 命令二 史上最详细

前言:前面说到,-path 是匹配路径的 ,同样的-regex 和-path功能相同,只是以正则表达式为条件进行匹配。 话虽如此,实际用起来还是有几个点要注意一下的。

正则表达式在文本匹配方面有很强大的功能,find命令同时支持正则,使用正则表达式需要使用-regex ,参数具体如下

 find . -regex ".*\(\.txt\|\.pdf \)$"/* 这个命令和上面的命令功能相同,看到这里是不是很疑惑?首先"\(\.txt\|\.pdf \)$"这个很好理解,我们不再多说,这个就表示以.txt或者.pdf结尾。那么为什么前面还有".*"呢??1. 虽然-regex表示可以使用正则表达式进行条件匹配,但是-regex 跟普通的find 命令有点区别,"find . \( -name "*.txt" -o -name "*.pdf" \)" 表示根据文件名进行查找,而-regex表示根据文件的路径,进行模式匹配!!!2. 再看看这个命令 find . 表示在.路径下查找,那么想想.下的所有文件它的全路径名是不是以.开始?? 比如.路径下有文件 first.txt ,second.pdf那么这些文件的全路径是不是./first.txt ./second.pdf? 问题又来了?那么照这么说,那*就可以匹配./first等等,.txt或者.pdf前面的任意字符了,为什么还有.呢?此外在正则中.是有特殊含义的,.表示匹配任意一个字符,从这个意义上讲完全说不通啊,那么我们想是不是代表要查找的路径啊,因为刚刚执行的是 find .啊??3, 我们执行的是find . 表示在当前路径下查找,那么我们做个测试,在~下新建a文件夹,我们把first.txt second.pdf 放在a下面,然后我们cd ~进入~进行查找:~$:find a/ -regex "a*\.txt" 照之前的理解那是不是也应该有结果啊事实上并没有,但是我们改一下: find a/ -regex ".*\.txt",结果有了输出:a/first.txt这是为什么呢? 留给聪明的你!*/

总结如下,执行find命令时注意以下两点:
1. -regex 表示连路径一起匹配,并不是单纯的只匹配文件名
2. 使用的技巧,正则表达式应以.*开头,然后后跟要表达的条件的正则表达式。 如下

find . -regex ".*\(\.txt\|\.pdf \)$"/*  \(\.txt\|\.pdf \)$ 是不是就表示以.txt或.pdf结尾?  然后前面加上.*  专注于逻辑的正则编写,加上.**/
0 0
原创粉丝点击