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
- 1420 megtekintés
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
- A hozzászóláshoz be kell jelentkezni
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."
- A hozzászóláshoz be kell jelentkezni
#! /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
- A hozzászóláshoz be kell jelentkezni
Tulbonyolitjatok. A lenyeg abban van, hogy a valtozohivatkozasok korul idezojelet kell hasznalni:
for i in *.bmp ; do convert "$i" "${i%bmp}tga" ; done
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Bár nem értem, ezt a % jelet, de tényleg műlködik...
Köszi!!!!
:D
- A hozzászóláshoz be kell jelentkezni
Azt jelenti, hogy a változó értékének *végéről* leszedi azt, ami a %-jel után áll ( "akarmi.bmp" -> "akarmi." ) amihez persze még hozzácsapom a neked kedves tga "kiterjesztést". (Van ugyanilyen, ami a változó elejéről vág le, az a # : v=ablak ; ${v#a} -> "blak".)
- A hozzászóláshoz be kell jelentkezni
És milyen jók is ezek a piciny trükkök... A sok-sok j=$(echo $i | sed '...') helyett! (Egyszer talán én is megjegyzem végre :-))
- A hozzászóláshoz be kell jelentkezni
http://tldp.org/LDP/abs/html/refcards.html
jó nagy betűkkel falra tapétának
- A hozzászóláshoz be kell jelentkezni
Most akkor nekem be van szólva??? :-))) Egyébként köszi a linket -- Zahy megoldás picit tuningolva:
for i in *.bmp ; do convert "$i" "${i/%bmp/tga}" ; done
- A hozzászóláshoz be kell jelentkezni
nem beszólva, főleg nem neked :)
csak a "megjegyezés" szóra reagáltam, hátha _másnak_ nehezére esne átnézni valamit, pl a referencet:)
- A hozzászóláshoz be kell jelentkezni
Gondoltam, ott is volt a smiley, egyébként mentségemre legyen szólva, amikor sokat, nagyon-nagyon sokat kellett shellscripteket gyártanom, akkor a bash mellett ksh, sh (posix), meg néha csh is előjött...
- A hozzászóláshoz be kell jelentkezni
Szar ügy, de ez biza az enyimmel ellentétben nem hordozható, a // keményen bashizm.
- A hozzászóláshoz be kell jelentkezni
Jogos, de itt a kérdés a bash-ról szólt :-)) És lassan, de biztosan fogynak azok a cuccok,a hol nincs bydefault bash is felrakva. Legalábbis szerintem...
"Vezeklésül" pdksh-ban is tesztelem eztán a dolgaimat. :-))
- A hozzászóláshoz be kell jelentkezni
Mintha valami olyasmi remlene, hogy pl. hapuksz-ban regebben volt, mostanaban nincs bash :-) - de majd rakerdezek Saabi-nal.
- A hozzászóláshoz be kell jelentkezni
es valoban, ezt mindig elfelejtem
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
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 :-)
- A hozzászóláshoz be kell jelentkezni