我有一个目录列表,其中大多数格式为./[foobar]/
. 但是,有些格式为./[foo] bar/
.
我想使用find
(或我的 shell 提供的其他一些实用程序)来查找那些与第一个模式不匹配的目录(即在方括号之外有文本)。直到现在,我还无法找到一种方法来“反转”我的模式。
有什么方法可以做到这一点?
您可以将 find 与 grep 及其 -v 选项结合使用。find . -type d | grep -v "[foobar]"
find
通过!
和支持否定-not
。后者不符合 POSIX。为了使用!
,您必须在它前面加上反斜杠或将其放在单引号内。
一个简单的常规 glob 将在此特定示例中起作用:
$ ls
[a]b [ab]
$ echo \[*\]
[ab]
对于更复杂的模式,您可以启用extglob
:
!(pattern-list)
Matches anything except one of the given patterns
(和类似的球)
或使用查找:
find dir ! -name ...
find -type d -name '*\]?*'
除非你坚持打开括号检查......