次のファイルがあるとします。
|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
私は次のコマンドを考えました
print -l foo/*~{type_B*}
everything under foo
excepttype_B
で始まるものを出力しますが、そうではなく、fooの下にすべてを出力します。
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
私もprint -l foo/*~type_B
を試しましたが、同じことがわかりました。
例外ワイルドカード~
はzshでどのように機能しますか?
例外にディレクトリを含める必要があります:print -l foo/*~foo/type_A*
またはprint -l foo/*~{foo/type_A*}
。
必要に応じて、ディレクトリをワイルドカードに置き換えることができます:print -l foo/*~*/type_A*
zshには^
EXTENDED_GLOBがオンの場合のグロブ演算子。それはあなたの述べられた状況にぴったりです:
setopt extendedglob
print -rl foo/^type_A*
これは、「次のパターンに一致するものを除いて、すべてに一致する」ことを意味しますが、その効果は、スラッシュの間のパターンの部分、またはパターンの先頭と最初のスラッシュの間、または(この場合のように)最後のスラッシュの間スラッシュとパターンの終わり。
現在有効になっているzshオプションを表示できます。
setopt
そしてEXTENDED_GLOBを無効にしてください:
unsetopt extendedglob