Hallo, Am Son, 14 Mai 2006, Oliver Block schrieb:
bevor ich den Sonntag einläute noch folgende Frage:
ich habe ein Shell-Script das mittels ImageMagick thumbnails aus allen Bildern (in einem Verzeichnis) macht. Folgendes Problem taucht auf:
Aufruf: ./mkthumbs.sh [-s size] indir outdir
in diesem Skript wird ein 'cd $1' durchgeführt und dann das Verzeichnis $2 angelegt. Das führt allerdings dazu, daß der Ausgangspunkt nicht das Verzeichnis ist, aus dem mkthumbs.sh aufgerufen wird. Und das sollte es IMHO sein.
Die eigentliche konvertierung der Bilder wird durch lediglich eine Zeile durchgeführt:
for datei in *.jpg do convert $datei -resize $sizex$size $2/$datei echo "konvertiere $datei nach $2/$datei, Groesse: $size x $size" done
Jetzt habe ich mir gedacht, ich speichere einfach das aktuelle Verzeichnis, und setze es vor '$2/$datei'. Das würde auch funktionieren, jedoch nur wenn $2 ein relative Pfadangabe macht.
Wie kann ich $2 testen, ob es eine relative oder absolute Pfadangabe ist? Darauf läuft es jawohl hinaus.
Setze gleich am Anfang die Verzeichnisse: ==== UNGETESTET!!! ==== if cd "$1"; then indir="`pwd -P`"; cd -; else echo "cannot cd to indir '$1'"; exit 1; fi if cd "$2"; then outdir="`pwd -P`"; cd -; else echo "cannot cd to outdir '$2'"; exit 1; fi find "$indir" -iname '*.jpg' -o -iname '*.jpeg' | while read -r infile do outfile="${outdir}/${infile}" ### ^ ^ ^ ^ if test -e "$outfile"; then ### ^ ^ echo "outfile '$outfile' exists. Skipping." continue fi echo "konvertiere '$infile' nach '$outfile', Groesse: $size x $size" convert -size "${size}x${size}" -resize "${size}x${size}" \ -geometry "${size}x${size}" "$infile" "$outfile" ### ^ ^ ^ ^ ^ ^ ### evtl. ist auch noch ein '-colors 256' als zusaetzlicher ### Parameter fuer convert sinnvoll. done ==== Die markierten Stellen sind entscheidend, damit du a) nicht schon bei nem Leerzeichen im Dateinamen auf die Fresse fliegst b) damit die shell (zuverlaessig!) erkennt, wo der Variablenname endet. Noch Fragen? -dnh --
PS.: Don't drink as root! Das kann man gar nicht oft genug sagen: "uups, rm -rf * statt rm -rf *~ in /etc", das war eine Meisterleistung nachts um 3 mit 2.6 auf dem Turm ;-)) [Volker Müller und Thomas Bendler in suse-linux]