Re: [LA-discussions] Bash : script récurent

[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]


Le Sun, 8 May 2011 12:05:29 +0200, Daniel Cartron <dan@xxxxxxxxxxx>
écrivait:

> for i in$(find ./ -type f -name cover.jpg)
> do
>    convert $i -resize 90x90 -strip -quality 75 cover.bmp;
> done
> 
> pouvez-vous m'indiquer où et comment mettre les "" pour protéger les
> espaces ?

Bonjour,

En ce qui concerne les guillemets, il suffit juste de les mettre
autour du $i :
convert "$i" -resize 90x90 -strip -quality 75 cover.bmp;

Les variables d'environnement contenues entre guillemets sont
substituées par le shell. Il faut les mettre entre apostrophes pour
qu'elles ne soient pas substituées.

Je n'ai pas suivi tout le fil de la discussion, mais pour nommer le
fichier destination, sed peut le faire :

for i in `find . -type f -name '*.jpg'`; do
  j=`echo "$i" | sed -e 's/jpg$/bnp/'`;
  convert "$i" -resize 90x90 -strip -quality 75 "$j";
done

Ça, c'est juste pour changer l'extension du fichier destination, mais
on peut adapter ensuite en changeant echo "$i" par basename "$i" ou
dirname "$i" selon ce qu'on veut obtenir au final.

Juste une remarque sur le script : le nombre de résultats retournés par
la commande find ne doit pas être trop important. Si le nombre de
fichiers retournés est grand, alors il faut utiliser l'option exec de
find, ou alors piper le résultat de find sur une commande xargs.
Ensuite, comme je ne sais pas faire passer une commande complexe en
argument de xargs, je passe par un script shell intermédiaire (où $i
devient $*).

-- 
Stéphan <stefan.bernard@xxxxxxxxxxx>


---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/