1

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

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

有什么方法可以做到这一点?

4

4 回答 4

3

您可以将 find 与 grep 及其 -v 选项结合使用。find . -type d | grep -v "[foobar]"

于 2013-03-06T17:14:41.353 回答
2

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

于 2013-03-06T17:14:13.627 回答
2

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

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

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

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

和类似的球

或使用查找:

find dir ! -name ...
于 2013-03-06T17:14:24.110 回答
1
find -type d -name '*\]?*'

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

于 2013-03-06T17:15:24.257 回答