Renomage de fichier en batch, Imagemagick

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 354
72
46
superced.rb38.eu
J'utilise ImageMagick pour remettre à l'échelle des images de façon automatique.

Pour l'instant, j'utilise le script suivant :
Bloc de code:
for img in `ls *_350_*.jpg`
do
  convert -filter Blackman -resize 40x40 $img thumb-$img
done

Mes images ont un nom du type : numero_taille_lettre.jpg , par exemple : 132_350_A.jpg.
Je ne souhaite convertir QUE les images du type numero_350_lettre.jpg et non les autres.
D'une part, je souhaite exclure les autres images possibles de la conversion.
D'autre part, je souhaiterais renommer mes images en quelque chose du type : numero_40_lettre.jpg, par exemple 132_40_A.jpg. Pour le moment, je crée des images de type thumb-numero_350_lettre.jpg, par exemple thumb-132_350_A.jpg.

Savez vous comment je peux, avec mon script unix, prendre uniquement mes images de type numero_350_lettre.jpg et les convertir en numero_40_lettre.jpg?
Par exemple 132_350_A.jpg -> 132_40_A.jpg .

Finalement, ma dernière question est sur l'agorithme de resizing de ImageMagick. J'utilise Blackman mais je ne sais pas si c'est le meilleur. J'aimerais utiliser le meilleur algo possible pour mon resizing. Savez-vous lequel je dois prendre?

Merci!
 
Bash recèle des capacités souvent inconnues.
Essaies les substitutions de caractères de bash:

Soit le nom de ton fichier dans la variable A:

>A=132_350_A.jpg

Pour avoir le début:

> echo ${A%%_*}

> 132

Pour avoir la seconde partie:

>echo ${A##*_}

> A.jpg

Et tu combines ce que tu veux en faisant:

> echo ${A%%_*}"cequejeveux"${A##*_}

> 132cequejeveuxA.jpg




Explications ci dessous (extraites de http://www.linux-kheops.com/doc/lgazette/issue-55/lg55-fr-2.html#ss2.1):

${#parametre}*: retourne la longueur de la valeur du paramètre.?Exemple*: ${#parametre} = 10
${parametre#motif}*: supprime la plus petite occurence à partir du début du paramètre.?Exemple*: ${parametre#*n} = uensis
${parametre##motif}*: supprime la plus grande occurence à partir du début du paramètre.?Exemple*: ${parametre#*n} = sis
${parametre%motif}*: supprime la plus petite occurence à partir de la fin du paramètre.?Exemple*: ${parametre%n*} = amanue
${parametre%%motif}*: supprime la plus grande occurence à partir de la fin du paramètre.?Exemple*: ${parametre%%n*} = ama
${parametre:decalage}*: retourne la valeur du paramètre débutant à decalage.?Exemple*: ${parametre:7} = sis
${parametre:decalage:longueur}*: retourne lougueur caractères commençant à decalage.?Exemple*: ${parametre:1:3} = man
${parametre/motif/substitut}*: remplace la première occurence de motif par substitut.?Exemple*: ${parametre/amanuen/paralip} = paralipsis
${parametre//motif/substitut}*: remplace toutes les occurences de motif par substitut.?Exemple*: ${parametre//a/A} = AmAnuensis

Courage

Ey.
 
J'ai fais ça :
Bloc de code:
for img in `ls *_350_*.jpg`
do
  new_filename=`echo $img | awk -v FS='_' '{print $1"_40_"$3;}'`
  convert -filter Blackman -resize 40x40 $img $new_filename
done

Ca marche pas mal.

Merci