该find
实用程序功能强大,但我需要一些附加功能。
它的-regex
搜索将每个文件名(或目录名)视为一个字符串,并仅在名称的开头应用给定的正则表达式。就像 python 一样re.match(..)
。如果它没有产生匹配,就不会被找到。
例如,如果我想查找包含“log”的文件,(我知道有更简单的方法来查找文件名包含“log”的文件,而无需使用正则表达式,但这仅作为示例)
$ find -regex 'log'
(nothing)
$ find -regex '\./.*log.*$'
./log9
./log7
./log5
./log0
./log2
./log4
./log6
./log8
./log3
./log1
那么,有没有一种方法可以使用正则find
表达式-regex
对文件名进行匹配,比如grep
或 python re.search(..)
- 不仅在字符串的开头,而且在任何可以匹配的地方?
答案1
正则表达式不仅适用于开头,还适用于所有的字符串。您只需提供正确的正则表达式,即捕获整个文件名的正则表达式:
$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Oct 6 15:46 aaafoo
-rw-r--r-- 1 terdon terdon 0 Oct 6 15:46 aaafooaaa
-rw-r--r-- 1 terdon terdon 0 Oct 6 15:46 fooaaa
$ find . -regex ".*foo.*"
./aaafoo
./aaafooaaa
./fooaaa
$ find . -regex "^./foo.*"
./fooaaa
$ find . -regex ".*foo"
./aaafoo
您可能正在寻找-name
采用 glob 而不是正则表达式的测试:
$ find . -name "*foo*"
./aaafoo
./aaafooaaa
./fooaaa