我有大部分在类似格式的目录列表./[foobar]/
。 然而,一些被格式化像./[foo] bar/
。
我想用find
(或其他一些公用事业我的壳报价)去寻找那些不匹配的第一图案目录(即具有方括号外面的文字)。 到现在为止,我无法找到一个方法来“逆”我的模式。
任何方法可以做到这一点?
我有大部分在类似格式的目录列表./[foobar]/
。 然而,一些被格式化像./[foo] bar/
。
我想用find
(或其他一些公用事业我的壳报价)去寻找那些不匹配的第一图案目录(即具有方括号外面的文字)。 到现在为止,我无法找到一个方法来“逆”我的模式。
任何方法可以做到这一点?
你可以找到结合使用grep和它的-v选项。 find . -type d | grep -v "[foobar]"
find
支持通过否定的方式!
和-not
。 后者是不符合POSIX标准。 为了使用!
你有反斜线先于它或把它放在单引号内。
一个简单的正水珠会在这个特殊的例子的工作:
$ ls
[a]b [ab]
$ echo \[*\]
[ab]
对于更为复杂的模式可以启用extglob
:
!(pattern-list)
Matches anything except one of the given patterns
( 以及类似的水珠 )
或者使用find:
find dir ! -name ...
find -type d -name '*\]?*'
除非你坚持开括号检验...