PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Skript zum konvertieren und umbenennen von Dateien



Tosk
19-06-2000, 14:44
hallo gemeinde,

ich möchte verzeichnisweise *.bmp-files in *.png-files convertieren, dazu habe ich ein kleines skript gebastelt, welches mittels der imlib die graphik-convertierung vornimmt, leider komme ich jedoch mit der umbenennung von *.bmp in *.png nicht zurecht...

aufruf:
myconvert bmp png



for OLDNAME in `ls *.${1}`

# Hier brauche ich hilfe, wie ersetze ich die endungen? sed?
NEWNAME = ${OLDNAME} - ${1} + ${2}

convert ${OLDNAME} PNG:${NEWNAME}
next


kann mir bitte jemand helfen?
dankeschön,

Tosk

Tosk
19-06-2000, 16:07
hossa,

kaum gepostet, schon durch zufall selbst gefunden (heuristic verblüfft mich immer wieder http://www.linuxforen.de/ubb/wink.gif)...

nur, falls es noch jemanden sonst interessiert:



for OLDNAME in `ls ./*.${1}`
do
BASE=`basename ${OLDNAME} ${1}`
NEWNAME=${BASE}${2}
echo "Convertiere " ${OLDNAME} " zu " ${NEWNAME}
convert -compress BZip -normalize ${OLDNAME} ${NEWNAME}
done


schönen tag noch,
Tosk

thommy
19-06-2000, 16:29
Versuche mal

<code>NEWNAME = $(echo $OLDNAME | sed 's/\.bmp/\.png/')</code>

Eine Beschreibung zum "sed" gibts u.a. in der <a href="http://www.linuxfibel.de/linux/linuxfibel/sed.htm" target="_blank">Linuxfibel</a>.

Thomas

blackbird
19-06-2000, 16:53
hi tosk!

wenns eh verzeichnisweise gehn soll, machs doch mit ner for-schleife.
so in der art:
<pre>for i in *.bmp
do
convert i.bmp i.png
next</pre>
allerdings nimmt die schleife die endungen in i auchnoch mit.. es gab aber auch ne möglichkeit dass das nicht passiert. ich dachte ich hätte das in meinen scripts noch drinnen, aber ist leider bei ner änderung verloren gegangen http://www.linuxforen.de/ubb/frown.gif
vielleicht bringt die die idee ja n bissl weiter...

grüsse blackbird

PS: das kommt dabei raus wenn man ein posting beginnt, dann schnell kuchen isst und dann weiterschreibt, dann ist alles schon gelöst und ich habs nicht mitbekommen..
was solls http://www.linuxforen.de/ubb/wink.gif

[Dieser Beitrag wurde von blackbird am 19. Juni 2000 editiert.]

robert
19-06-2000, 18:10
Hallo!

Wenn du es z.B. immer nur mit Bash laufen läßt, kannst du es auch wie folgt machen...



for f in $*;
do
DirName=${f%/*}
BaseName=${f##*/}
BaseName=${BaseName%.*}
Ext=${f##*${BaseName}}

cp -v $f ${DirName}${BaseName}.png

# oder auch so...
# cp -v ${DirName}${BaseName}${Ext} ${DirName}${BaseName}.png
done


Dabei bedeutet $* die Dateinamen die per Parameter an das Script übergeben wurden (da die Shell dies ja auflöst, kann dies auch mit Wildcards geschehen, z.B. scriptname *.bmp).
$DirName, $BaseName und $Ext sollten ja selbsterklärend sein.
Aber Achtung! Wenn keine Verzeichnisname vorhanden ist, enthält $DirName den kompletten Datei-Namen!!!
Die kann man durch ein einfach if $DirName = $f vergleichen...

Das ganze Spart natürlich den extra Aufruf von externen Tools (sed oder basename), weil es alles über Bash und die Shell-Variablen läuft. http://www.linuxforen.de/ubb/smile.gif

Gruss

Robert

[Dieser Beitrag wurde von robert am 20. Juni 2000 editiert.]