¿Cómo niego correctamente las expresiones globales de zsh?

18

Quiero enumerar todos los archivos, pero los que terminan con owp: Por lo tanto, intenté:

  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

ninguno funcionó. ¿Cómo hago eso de manera correcta? Mi .zshrc ha "establecido Extendedglob".

matemáticas
fuente

Respuestas:

27

Prueba cualquiera:

ls -l ^*.owp

(es decir, hacer coincidir cualquier cosa excepto el patrón *.owp)

o:

ls -l *~*.owp

(es decir, coincide con todo lo que coincide con el patrón *pero no coincide *.owp)

Ver man zshexpn=> FILENAME GENERATION=> Glob Operatorspara más información sobre esto.


Anexos ()en los patrones globales son para calificadores globales, mientras que usted quiere un operador global.

Lo que *.(^owp)hace es:

  1. Haga coincidir todos los nombres de archivo que terminan con un punto
  2. si no son tuberías (^p), y
  3. ordenar las coincidencias (o)por " w" => "especificador de clasificación desconocido"

Ver man zshexpn=> FILENAME GENERATION=> Glob Qualifierspara más información sobre esto.

peth
fuente
1
^ *. owp hizo el trabajo. whooa, para lo que *. (^ owp) realmente hace :)
matemáticas
99
Para cualquiera que no pueda hacer que esto funcione, debe configurar la extendedglobopción en Zsh.
DBedrenko
77
@DBedrenko: ¡gracias! NB: hecho a través desetopt extendedglob
Thomas M
1
Encontré esto útil como un resumen rápido para cualquier persona interesada en los calificadores globales.
Wardw