Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/03/2015, à 10:32

Aerandir

Convert et rename à la volée

Bonjour à tous,

Voilà mon problème, j'ai une arborescence d'image comme ceci :

/images/*/*/*/nomdemonfichier.jpg

Dans un premier, je retaille ces images via convert (imagemagick) :

find /images/* -name '*.jpg' -type f -exec convert {} -resize "670x350^" -gravity center -crop 670x350+0+0 +repage {} \;

La seconde étape serait de retailler ces images mais en les préfixant en retour par p, le but étant de générer des thumbnails, mais je n'arrive pas à le faire car {} contient le path entier de l'image.

Auriez-vous des pistes (voir des bouts de script) qui me permettrait de trouver/retailler/renommer ces images en thumbnails ?

Ci-dessous, le convert des thumbnails :

convert {} -resize "320x225^" -gravity center -crop 320x225+0+0 +repage {} # j'aimerais pouvoir glisser ici mon prefixe de fichier.

Merci pour toute l'aide que vous pourrez m'apporter !

Aerandir

Dernière modification par Aerandir (Le 27/03/2015, à 10:36)

Hors ligne

#2 Le 27/03/2015, à 11:14

pingouinux

Re : Convert et rename à la volée

Bonjour,
Tu peux t'inspirer de ceci, qui fait un echo du nom de chaque fichier trouvé, et du nom modifié :

while read f
do
   echo "$f" "${f%/*}/p${f##*/}"
done < <(find /images/* -name '*.jpg')

Attention : Le nouveau nom peut correspondre à un ancien nom d'une autre image

Hors ligne

#3 Le 27/03/2015, à 11:34

Aerandir

Re : Convert et rename à la volée

while read f

Qu'est ce que "f" ?

Hors ligne

#4 Le 27/03/2015, à 11:38

pingouinux

Re : Convert et rename à la volée

Qu'est ce que "f" ?

C'est le nom d'une variable (que tu peux appeler comme tu veux), qui va contenir successivement le nom de chaque fichier trouvé par le find.
Tu peux tester la commande sans risque, elle ne fait qu'un echo.

Hors ligne

#5 Le 27/03/2015, à 11:45

Aerandir

Re : Convert et rename à la volée

je duis désolé, mais je n'arrive pas à écrire quelque chose qui m'affiche quoique ce soit. Aurais-tu une commande écrite en entier ?

Hors ligne

#6 Le 27/03/2015, à 12:02

pingouinux

Re : Convert et rename à la volée

Aurais-tu une commande écrite en entier ?

Elle est écrite en entier (c'est une commande bash, écrite sur 4 lignes).
Elle est censée afficher des lignes du genre de celle-ci (nom du fichier + nom du fichier préfixé par p)

/images/repertoire1/repertoire2/mon_image.jpg /images/repertoire1/repertoire2/pmon_image.jpg

À toi de l'adapter pour l'utiliser avec convert.

Hors ligne

#7 Le 27/03/2015, à 12:12

nany

Re : Convert et rename à la volée

Bonjour,

voici ma proposition en une seule ligne avec convert :

find /images/* -name '*.jpg' -type f -exec bash -c 'convert $1 -resize "320x225^" -gravity center -crop 320x225+0+0 +repage $1 "$(dirname $1)/p$(basename $1)"' _ '{}' \;

Hors ligne

#8 Le 27/03/2015, à 12:59

Aerandir

Re : Convert et rename à la volée

Tout d'abord merci de prendre un peu de temps pour m'aider.

Je viens de tester la commande sur une seul ligne, et il semble qu'elle ne fasse exactement ce que j'attends, à savoir qu'elle me génère ces fichiers :

4819398_1.jpg  4819412_1.jpg  4819436_1.jpg     p4819398_1-1.jpg  p4819410_1-0.jpg  p4819412_1-1.jpg  p4819422_1-0.jpg  p4819436_1-1.jpg
4819407_1.jpg  4819414_1.jpg  4819438_1.jpg     p4819407_1-0.jpg  p4819410_1-1.jpg  p4819414_1-0.jpg  p4819422_1-1.jpg  p4819438_1-0.jpg
4819410_1.jpg  4819422_1.jpg  p4819398_1-0.jpg  p4819407_1-1.jpg  p4819412_1-0.jpg  p4819414_1-1.jpg  p4819436_1-0.jpg  p4819438_1-1.jpg

Soit une version en -0 et une version -1.

Je dois avouer que je comprend la commande, jusqu'à :

"' _ '{}'

Peut-être le suffixe en -0 ou -1 est dû à ce bout de code ?

Hors ligne

#9 Le 27/03/2015, à 14:16

nany

Re : Convert et rename à la volée

_ '{}' sert à passer le résultat de find en argument à la commande bash, récupéré avec $1.
J’ai simplement recopié ta commande convert en remplaçant les {} par $1.
À toi de voir ce que tu souhaites faire exactement avec la commande convert, peut-être ceci :

find /images/* -name '*.jpg' -type f -exec bash -c 'convert $1 -resize "320x225^" -gravity center -crop 320x225+0+0 +repage "$(dirname $1)/p$(basename $1)"' _ '{}' \;

 ?

Hors ligne

#10 Le 27/03/2015, à 14:33

Aerandir

Re : Convert et rename à la volée

Je viens de tester et ça fonctionne à merveille !

Merci à tous, pour ce super tuyau !

Hors ligne