Les patterns de base sont assez nazes, mais en bash-3.x y'a aussi le support des vraies regexps, même si elles sont pas forcement toujours très pratiques à utiliser (opérateur de comparaison "=~", et variable $BASH_REMATCH pour récupérer les matchs). En étant un peu tordu, enfin plus pour illustrer leur utilisation en fait, ça peut donnes des trucs dans ce genre là :
for f in * ; do
if [[ "${f}" =~ '^([a-zA-Z]+)\.([mM][pP]3)$' ]] \
&& [[ "${BASH_REMATCH[2]}" != "mp3" ]] ; then
mv "${f}" "${BASH_REMATCH[1]}.mp3"
fi
done
Comme tu vois, je confronte des noms de fichier à une regexp 'achement compliquée, qui a deux sous expressions qui, quand ça matche, sont récupérables dans le tableau $BASH_REMATCH (et pour info, à l'indice 0 on aurait trouvé le match complet, ici équivalent à $f bien sûr). Heu, bon, on est bien d'accord que mon exemple est débile, mais bref, parfois c'est bien pratique pour éviter de forker des grep ou des sed...
[^] # Re: jette un oeil a man rename
Posté par tgl . En réponse au message Expression rationnelle - Majuscule/Miniscule. Évalué à 3.
for f in * ; do if [[ "${f}" =~ '^([a-zA-Z]+)\.([mM][pP]3)$' ]] \ && [[ "${BASH_REMATCH[2]}" != "mp3" ]] ; then mv "${f}" "${BASH_REMATCH[1]}.mp3" fi doneComme tu vois, je confronte des noms de fichier à une regexp 'achement compliquée, qui a deux sous expressions qui, quand ça matche, sont récupérables dans le tableau $BASH_REMATCH (et pour info, à l'indice 0 on aurait trouvé le match complet, ici équivalent à $f bien sûr). Heu, bon, on est bien d'accord que mon exemple est débile, mais bref, parfois c'est bien pratique pour éviter de forker des grep ou des sed...