Just Another Geek!/ blog/ posts/ Explication du billet précédent
extensions=''${(fR)${(M)${(f)"$(< /etc/mime.types)"}##video*}##video[[:alnum:]./-]##[\t ]#}''
  1. $(< /etc/mime.types) - on extrait le contenu du fichier
  2. ${(f)"..."} - on fait du line-splitting
  3. ${(M)${...}##video*} - on ne sélectionne que les lignes matchant video*
  4. ${(R)${...}##video[[:alnum:]./-]##[\t ]#} - on matche la partie gauche de la ligne et on garde le reste.

Maintenant, la variable $extensions contient les extensions dans un fouilli pas encore utilisable : ce qu'on veut, c'est construire une expression rationnelle qui matche un nom de fichier associé à une vidéo. On veut *(wmv|avi|mkv|mpg). Pour le moment, on a une chaine de ce genre :

wmv     avi mkv         mpg
videos="(#i)*(${(j:|:)${(z)extensions}})"
  1. ${(z)extensions} - on fait un word-splitting classique (les éléments sont séparés par $IFS)
  2. ${(j:|:)...} - on joint tous les mots/éléments par le caractère '|'
  3. (#i)*(...) - on mets le flag "case insensitive" et le {début,fin} de l'expression rationnelle.