ほとんどがのような形式のディレクトリのリストがあります./[foobar]/
。ただし、のようにフォーマットされているものもあり./[foo] bar/
ます。
最初のパターンと一致しない(つまり、中括弧の外側にテキストがあるfind
)ディレクトリを見つけるために(またはシェルが提供する他のユーティリティを)使用したいと思います。今まで、自分のパターンを「反転」させる方法を見つけることができませんでした。
これを行う方法はありますか?
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 '*\]?*'
あなたがブラケットチェックを開くことを主張しない限り...