Hallo, 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. Seligen Sonntag! Gruß, Oliver
Am Sunday 14 May 2006 02:01 schrieb Oliver Block:
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.
if [ ${2:0:1} = "/" ]; then absolut -- Andreas
Am Sonntag, 14. Mai 2006 07:32 schrieb Andreas Winkelmann:
if [ ${2:0:1} = "/" ]; then absolut
In der Kürze liegt die Würze. Und ich verwende auch die Bash, insofern ist das Skript nicht viel länger geworden.:) Danke, auch an die anderen Gruß, Oliver
-----Original Message----- From: suse-linux-return-374676-thomas.zinner=web.de@suse.com [mailto:suse- linux-return-374676-thomas.zinner=web.de@suse.com] On Behalf Of Oliver Block Sent: Sunday, May 14, 2006 2:01 AM To: suse-linux@suse.com Subject: [suselinux] Shell Script ... Aufruf: ./mkthumbs.sh [-s size] indir outdir ... Wie kann ich $2 testen, ob es eine relative oder absolute Pfadangabe ist? Darauf läuft es jawohl hinaus.
Alles was nicht mit "/" anfängt ist eine relative Pfadangabe. Also in etwa (nur rumschwadroniert, nachprüfen!)... $2=test if grep test ^/ then ... Bzw ... $2=test if grep test ^\/ then ... Oder irgendwie so... Alternativ könntest Du Deinen absoluten Standort mit "pwd" ermitteln und auswerten, oder am besten einfach jede Eingabe mit einem führenden "/" ablehnen. Ciao Fomtom
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]
participants (4)
-
Andreas Winkelmann
-
David Haller
-
Oliver Block
-
Thomas Zinner