web-dev-qa-db-ja.com

zshグロブ式を正しく否定するにはどうすればよいですか?

Owpで終わるファイル以外のすべてのファイルを一覧表示したいので、次のことを試しました。

  ls -l *.(^owp)
  zsh: unknown sort specifier
  ls -l *(^owp) 
  zsh: unknown sort specifier
  ls -l *[^o][^w][^p] # does not work either, missing some files

どれも機能しませんでした。どうすれば正しい方法でそれを行うことができますか?私の.zshrcには「setextendedglob」があります。

18
math

次のいずれかを試してください。

_ls -l ^*.owp
_

(つまり、パターン_*.owp_以外のものに一致します)

または:

_ls -l *~*.owp
_

(つまり、パターン_*_に一致するが_*.owp_には一致しないものに一致します)

詳細については、_man zshexpn_ => _FILENAME GENERATION_ => _Glob Operators_を参照してください。


グロブパターンで追加された_()_は、グロブ修飾子用ですが、グロブ演算子が必要です。

*.(^owp)が行うことは次のとおりです。

  1. ドットで終わるすべてのファイル名に一致
  2. パイプでない場合は_(^p)_、および
  3. 一致を__(o)_を "w"でソートします=> "不明なソート指定子"

詳細については、_man zshexpn_ => _FILENAME GENERATION_ => _Glob Qualifiers_を参照してください。

27
peth