Comme je racontais la dernière fois, j'ai un répertoire où j'entasse tous les fichiers de la journée, cela peut être des vidéos, papiers, codes, etc.

J'aime bien visionner toutes les vidéos sans avoir me prendre la tete, donc j'aimerai bien faire :

% mplayer *

Ca marche, mais vous êtes d'accord que c'est pas terrible : mplayer tente de lire même les fichiers pdf et ca ne lui plait pas toujours... Alors on tente d'affiner :

% mplayer *(avi|mpg|mkv)

Mais comme le veut Murphy, on oublie toujours d'indiquer un format, et puis c'est long de taper (et de se souvenir) de toutes les extensions possibles.

Utilisons alors le fichier /etc/mime.types pour récupérer toutes ces extensions. Utilisons du Perl pour faire ca :

% videos="(#i)*($(perl -lane 'push @x, $F[1] if /video/ && defined $F[1];END{print join q/|/,@x}' /etc/mime.types))"
% echo $videos
(#i)*(dl|fli|gl|mpeg|mp4|qt|mxu|dif|lsf|mng|asf|wm|wmv|wmx|wvx|avi|movie)
% echo $~videos
bl.avi bl.AVI

Ce qui marche plutot bien... Mais comme c'est encore trop simple comme solution, utilisons zsh uniquement : pas besoin de gaspiller un fork() !

% extensions=''${(fR)${(M)${(f)"$(< /etc/mime.types)"}##video*}##video[[:alnum:]./-]##[\t ]#}''
% videos="(#i)*(${(j:|:)${(z)extensions}})"

(bon, j'y ai passé une heure, mais ca a plus de gueule non ? On pourrait encore factoriser une ou deux expressions mais j'ai mal à la tête...)

Pourquoi faire simple lorsqu'on peut faire compliqué ?