Chaton a écritfor inode in $(ls *.JPG)
C'est mal, très mal… Hérétique ! Brulez-le !
La notion d'inode étant différente de celle de nom de fichier, le choix de la variable porte à confusion (c'est le cas des liens durs : un seul inode pour plusieurs noms de fichier).
Mais surtout il ne faut
jamais réutiliser la sortie de
ls, tu cours à la catastrophe si le nom d'un fichier contient un espace, ou pire un saut de ligne (si si, c'est autorisé). Surtout qu'ici, résoudre le problème va en plus simplifier le code, accélérer l'exécution et consommer moins de ressources (car il n'y a pas d'appel à un programme externe) :
for fichier in *.JPG
Ça marchera a tous les coups…
convert $inode -resize 15% "out/"$inode
Tu t'y prends mal : « out/ » n'a pas besoin d'être entre guillemets, mais une variable doit
toujours être entre guillemets doubles (toujours les problèmes d'espaces, la seule exception étant les variables auxquelles tu assignes des constantes dans le script-même). Il faut donc écrire
convert "$fichier" -resize 15% out/"$fichier"
ou à mon avis moins moche
convert "$fichier" -resize 15% "out/$fichier"
Comme je l'ai déjà dit : faire en sorte qu'un script accepte les noms de fichier contenant des espaces est facile dans 99 % des cas.
Ceux qui disent « mon script n'accepte pas les noms de fichier contenant des espaces » méritent la peine capitale !