我有一个目录列表,其中大多数目录的格式为./[foobar]/
。但是,有些格式为./[foo] bar/
。
我想使用find
(或我的shell提供的其他实用程序)来找到与第一个模式匹配的 not 目录(即在方括号外面有文本)。到现在为止,我无法找到一种方法来“反转”我的模式。
有什么办法吗?
答案 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
或使用find:
find dir ! -name ...
答案 3 :(得分:1)
find -type d -name '*\]?*'
除非你坚持开括号检查......