¿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".

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.