[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: