如何正确否定 zsh globbing 表达式?

mat*_*ath 24 zsh globbing

我想列出所有文件,但那些以 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
Run Code Online (Sandbox Code Playgroud)

没有一个工作。我如何以正确的方式做到这一点?我的 .zshrc 已经“设置了extendedglob”。

pet*_*eth 35

尝试:

ls -l ^*.owp
Run Code Online (Sandbox Code Playgroud)

(即匹配除模式之外的任何内容*.owp

或者:

ls -l *~*.owp
Run Code Online (Sandbox Code Playgroud)

(即匹配任何匹配模式*但不匹配的东西*.owp

有关更多信息,请参阅man zshexpn=> FILENAME GENERATION=> Glob Operators


附加()在 glob 模式中用于 glob 限定符,而您需要一个 glob 运算符。

什么*.(^owp)是:

  1. 匹配所有以点结尾的文件名
  2. 如果它们不是管道(^p),并且
  3. (o)按“ w”=>“未知排序说明符”对匹配项进行排序

有关更多信息,请参阅man zshexpn=> FILENAME GENERATION=> Glob Qualifiers

  • 对于无法使用此功能的任何人,您需要在 Zsh 中设置 `extendedglob` 选项。 (10认同)
  • @DBedrenko:谢谢!注意:通过`setopt extendedglob`完成 (8认同)