Re: convert et noms des fichiers
Le lundi 4 juillet 2011 à 13:11:25, Christophe Gallaire a écrit
:
> Nicolas Bercher a dit dans un souffle :
> >On 01/07/2011 17:22, Christophe Gallaire wrote:
> >>convert -density 300 *.jpg *.jpg
> >
> >Ceci ne pourra pas fonctionner car * est interprété par ton
> >shell avant d'éxcuter convert. Par exemple, si tu as les
> >fichiers 1.jpg, 2.jpg et 3.jpg, la commande exécuté sera
> >
> > convert -density 300 1.jpg 2.jpg 3.jpg 1.jpg 2.jpg 3.jpg
>
> Non, en fait cette commande renomme simplement les fichiers
> avec * en plus. Le premier *.jpg est l'input et le deuxième
> l'output.
Si. L’expansion des jokers (globbing) est faite par le shell
avant de lancer toute commande. Donc les arguments que reçoit
convert sont bien deux fois le nom des fichiers.
En général, si tu veux passer *.jpg sans globbing, tu dois
mettre des guillemets. Mais ImageMagick fait son propre
globbing. Donc ça ne sert à rien.
'convert' ne prend que deux fichiers en arguments : l’origine
et la destination. S’il y a plus de deux noms de fichiers, le
dernier correspond à la destination, auquel sera ajouté un tiret
et un numéro.
En faisant 'convert -bla *.jpg *.jpg', avec ou sans guillemets
autour des *, il va traiter tous les fichiers .jpg deux fois,
sauf le dernier qui ne sera traité qu’une fois, et nommera les
résultats par le dernier nom suivi de '-<numéro>.jpg'.
>[…]
> > for i in *.jpg; do convert "${i}" small-"${i}"; done
>
> Je ne comprends pas pourquoi le small.
Comme son nom l’indique, 'convert' convertit, d’un fichier à
un nouveau fichier. Il est plutôt utilisé pour convertir entre
deux formats, donc avec un résultat qui n’a en général pas la
même extension.
Comme son nom l’indique moins, 'mogrify' modifie un fichier,
sur place donc. C’est expliqué dans la section NAME de la page
de man de 'mogrify'. Il ne prend pas de nom de destination.
>[…]
> for i in *.jpg; do mogrify -density 300 $i;done
'mogrify' ne prenant pas de destination, 'mogrify -density 300
*.jpg' fonctionnera aussi bien.
> Peut-elle tenir compte de sous-répertoires ? je viens de
> lancer le traitement un gros lot pour voir avec
> sous-répertoire.
Non, utilise find pour ça :
find . -iname "*.jpg" -exec mogrify -density 300 {} \;
ou, pour lancer un peu moins de mogrify :
find . -iname "*.jgp" -print0 | xarsg -0 mogrify -density 300
--
Sylvain Sauvage
Reply to: