Comment filterr un glob dans zsh

Fondamentalement, je peux utiliser un glob dans zsh à une list. Souvent, il s'avère, je voudrais filterr cette list, grep'ishly je me request cependant, si je dois le faire.

Zsh a-t-il une méthode pour filterr une list? Je crains que ce soit une question évidente, mais c'est un jour de faible rendement aujourd'hui, mentalement.

C'est une sorte de question étrange, vu que zsh est le seul shell avec cette fonctionnalité. C'est ce qu'on appelle les qualificatifs glob . Le manuel est, comme d'habitude, plutôt laconique et dépourvu d'exemples. La page Zsh-lovers a quelques exemples. Googler zsh "glob qualifiers" tourne quelques messages de blog et des tutoriels. Vous pouvez également searchr "glob qualifier" sur ce site .

Les bases: les qualificateurs glob sont entre parenthèses à la fin du glob. Les plus utiles sont les signes de ponctuation pour sélectionner uniquement certains types de files.

 echo *(/) # directories echo *(.) # regular files echo *(@) # symbolic links echo *(-/) # directories and symbolic links to directories 

Il existe d'autres qualificateurs à filterr sur les métadonnées telles que la taille, la date et la propriété.

 # files owned by the user running zsh, over 1MB, last modified more than 7 days ago echo *(ULm+1m+7) 

Les qualificatifs Glob peuvent également contrôler l'ordre des matches et limiter le nombre de matchs.

 echo *(Om[1,10]) # The 10 oldest files 

Vous pouvez configurer des filters arbitraires en appelant une fonction, avec le qualificateur + (vous pouvez même mettre le code en ligne avec le qualificatif e , si cela ne vous dérange pas la citation délicate).

Notez que malheureusement tout cela ne fonctionne que sur globs. Si vous voulez créer une list de noms de files de cette façon, vous devez filterr lorsque vous effectuez un mappage. Si vous voulez filterr une list que vous avez déjà construite, il y a une syntaxe complètement différente, les indicateurs d'expansion des parameters , qui ne peuvent effectuer qu'un simple filtrage de text ( "${(@)ARRAY:#PATTERN}" ).