[megoldva] basic bash

Sziasztok!

Szeretnék egy rakatnyi egy mappában lévő fájlt a imagick-al bmp-ből tga-ra átkonvertálni...
egy fájlt így kell:
convert [fajl.bmp] [fajl.tga]
a baj csak az, hogy a fájljaim tartalmaznak szóközt, és azt hiszi a gépem, hogy több paramétert adok meg...
írtam egy szkriptet:


#! /bin/bash
for i in *.bmp;
do
k=`echo $i | tr ' ' '\ '`; #átírom a ' '-eket '\ '-re, mert azt hiszem így kell neki beadni a szóközt, de lehet nem...
j=`echo $k | tr '.bmp' '.tga'`;
convert $k $j;

done

de sajnos nem műlködik...
Hol a hiba?
Hogy kéne csinálnom?

Köszi: Koli

Hozzászólások

A gond, hogy a tr csak karaktereket cserel. A space-t kicsereli '\'-re de nem '\ ' -re.
De mar ott leall sajnos a dolog, hogy a 'for i in *.bmp' is azt hiszi uj szo jon a space utan. (probald ki echo $i -vel)

Az egyik megoldas azt hiszem a szovalaszto karakterek atallitasa lehet:
OLDIFS=$IFS
export IFS=`;` # ha ';' nincs a nevekben
szerk: bocs, a for i in *bmp megy, eleg ha a tr helyett ez van:
bela=`echo $i | sed -e 's/ /\\ /g;`

utana mar nem kell a tr, ha minden igaz.

Egy masik megoldas, hogy a find parancsot hasznalod:
find *.bmp -exec convert {} `basename {} .bmp` .tga

Ez most igy fejbol megy, ideszerkesztek ha kiprobaltam

Esetleg így :

orig=$IFS
IFS=$(echo -en "\n")
for i in $(ls *bmp); do
...
done
IFS=$orig

[szerk]: lassú voltam...
---
"A megoldásra kell koncentrálni nem a problémára."


#! /bin/bash

find -name "*.bmp" | \
  while read LINE
  # és akkor a LINE-ba a teljes
  # sor kerül szóközöstől meg
  # mindenestől.
do
  BDIR="$(dirname "$LINE")"
  BNAME="$(basename "$LINE" .bmp)"

  convert "$LINE" "${BDIR}/${BNAME}.tga"
done

Tulbonyolitjatok. A lenyeg abban van, hogy a valtozohivatkozasok korul idezojelet kell hasznalni:

 for i in *.bmp ; do convert "$i" "${i%bmp}tga" ; done 

A tr karaktert cserél karakterre, azaz a: tr ' ' '\ ' visít, mert egy karakteres a "mit" lista, és két karakteres a "mire" lista.
A másik tr esetén meg a b-t cseréled t-re, az m-et g-re, a p-t meg a-ra. Azaz pl. a "pomber.bmp" stringből lesz "aogter.tga" -- gondolom ezt pont nem szeretnéd :-)