正则表达式 - 查找不匹配的文件

时间:2013-03-06 17:11:30

标签: regex bash find

我有一个目录列表,其中大多数目录的格式为./[foobar]/。但是,有些格式为./[foo] bar/

我想使用find(或我的shell提供的其他实用程序)来找到与第一个模式匹配的 not 目录(即在方括号外面有文本)。到现在为止,我无法找到一种方法来“反转”我的模式。

有什么办法吗?

4 个答案:

答案 0 :(得分:4)

你可以将find与grep和它的-v选项结合起来。 find . -type d | grep -v "[foobar]"

答案 1 :(得分:2)

find通过!-not支持否定。后者不符合POSIX标准。要使用!,您必须在其前面加上反斜杠或将其放在单引号内。

答案 2 :(得分:2)

一个简单的常规glob将在这个特定的例子中起作用:

$ ls
[a]b [ab]
$ echo \[*\]
[ab]

对于更复杂的模式,您可以启用extglob

!(pattern-list)
     Matches anything except one of the given patterns

and similar globs

或使用find:

find dir ! -name ...

答案 3 :(得分:1)

find -type d -name '*\]?*'

除非你坚持开括号检查......