[linux-l] shell skript probleme mit leerzeichen

Jan-Benedict Glaw jbglaw at lug-owl.de
Do Okt 27 16:56:25 CEST 2005


On Thu, 2005-10-27 16:40:45 +0200, willek <willek at gmx.de> wrote:
> Morche Matthias schrieb:
> 
> > Einfach nur um alles, was ein $ vorn dran hat Gaensefuesschen drumrum
> > und statt `ls` einfach *:
> > #!/bin/bash
> > # /usr/local/bin/verkleinere
> > #
> > # verkleinert Bilder im aktuellen Verzeichnis
> > # auf 640x480 und speichert sie in Ordner
> > # ./verkleinert unter dem angegebenen Suffix ab
> > #
> > # Aufruf: verkleinere <Dateiendung>
> > mkdir verkleinert
> > for i in *; do
> > basename="${i%.*}"
> > echo "$i" "$basename.$1"
> > convert -resize 640x480 "$i" verkleinert/"$basename.$1"
> > done
> > 
> Danke, das funktioniert, obwohl ich nicht verstehe warum. Warum reicht
> in diesen Fall ein Stern aus, um alle Dateien einzulesen?

Ja.

> Und noch eine Verständnisfrage:
> Ich wollte die Leerzeichen maskieren, etwa so:
> for i in `ls |sed s/" "/"\\ "/g` ; do
> warum hat das nicht funktioniert?

Oha... Lieber nicht anfangen, irgendwelche Spezialfälle speziell zu
behandeln. Was ist, wenn Dateinamen einen Zeilenumbruch beinhalten?
Maskierst Du den dann auch?

> Und wie schaffe ich es beispielsweise, nur Bilddateien konvertieren zu
> lassen? So wie mein und Dein skript jetzt sind versuchen sie alles zu
> fressen, unabhängig davon, um  welche Art von Datei es sich handelt.
> Irgendwie noch eine schleife, die vor der übergabe an die Variable alle
> Dateien darauf prüft, ob sie Bilddateien sind? hmm müsste mit "file"
> gehen. oder irgend ein grep oder ein Parameter von ls Ich werd mal die
> man-pages studieren.

Da gibts mehrere Wege. Entweder checkst Du den file type:

for i in *; do
	case `file -b "$i"` in
		*image*)
			IMAGE_BASENAME="${i%.*}"
			convert -resize 640x480 "$i" "verkleinert/${IMAGE_BASENAME}.$1"
			;;
		*)
			:;;
	esac
done

Der andere Weg wäre, anhand der Endung vorzusortieren:

for i in *.jpeg *.jpg *.bmp; do
	[ -f "$i" ] && continue
	IMAGE_BASENAME="${i%.*}"
	convert -resize 640x480 "$i" "verkleinert/${IMAGE_BASENAME}.$1"
done

> Skripten ist irgendwie eine Droge... man kommt nich weg davon...
> und je mehr man konsumiert, umso abhängiger wird man ;-)

Wenn Du Deine Aufgaben zu 100% gescriptet hast, hast Du 100% Freizeit.
Sieh das mal so :-)

MfG, JBG

-- 
Jan-Benedict Glaw       jbglaw at lug-owl.de    . +49-172-7608481             _ O _
"Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg  _ _ O
 für einen Freien Staat voll Freier Bürger"  | im Internet! |   im Irak!   O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: Digital signature
URL         : <https://mlists.in-berlin.de/pipermail/linux-l-mlists.in-berlin.de/attachments/20051027/5d8b6d31/attachment.sig>


Mehr Informationen über die Mailingliste linux-l