zur Übersicht

nächste Seite


Programmschleifen

Es werden die Ausführungen von Basics 2 fortgeführt. 
In dem Ordner ~/Bla/Nur/BlaBla sind drei Textdateien vorhanden. 
Man kann den Eingabeprompt in diesen Ordner verlegen: 

cd ~/Bla/Nur/BlaBla

(im Terminal eingeben und Eingabetaste drücken)
Damit werden alle Eingaben direkt in diesem Ordner ausgeführt. Die auf dieser Seite aufgeschriebenen Terminal-Eingaben auf den weißen Feldern sind so zu verstehen daß der Eingabeprompt des Terminals in diesem Ordner
~/Bla/Nur/BlaBla
liegt und daß die Zeichen aus den weißen Feldern im Terminal eingefügt werden und die Eingabetaste gedrückt wird. So ergibt

mkdir TG

einen neuen Ordner. 
Debian hat auch das Programm ImageMagick installiert - ein Bildbearbeitungsprogramm das mittels Terminal gesteuert wird. So ergibt

convert -size 30x30 xc:green Bild-green.png

eine Bilddatei mit grüner Fläche in der Größe 30x30 pixel. 
Nun gibt es 3 Textdateien, einen Ordner und eine Bild-Datei. 
Programmschleifen ermöglichen ein sehr effektives Bearbeiten von Dateien. Sie haben die Form 

for i in *.txt; do Bearbeitungsbefehle für $i A${i%.txt}B.txt; done

Erläuterung: Der Buchstabe i definiert eine Variable und kann auch durch andere Buchstaben ersetzt werden, z.B. 

for wu in *.txt; do
Bearbeitungsbefehle für $wu A${wu%.txt}B.txt; done 

*.txt bedeuted alle Dateien mit der Endung .txt Das könnte natürlich auch heißen *.png oder *.jpg oder *.ods oder auch 
Rechnung*.txt (alle txt-Dateien die mit Rechnung beginnen) oder 
Foto*.png (alle png-Dateien die mit Foto beginnen) 

Dann kommen die Bearbeitungsbefehle für $i (die Variable i wir durch $i angesprochen). 
Die nächsten Zeichen bestimmen wie der ausgegebene Name der neuen Datei sein wird. 
${i%.txt} bedeuted daß von rechts her zuerst die Endung .txt ausfindig gemacht wird und gelöscht wird so daß nur noch der Dateiname vor .txt übrigbleibt, dann wird der neue Name aufgebaut in der Form A(alter Dateiname)B.txt 

Als Bearbeitungsbefehl für $i wird jetzt das Umbenennen verwendet mv $i

for i in B*.txt; do mv $i R-2${i%.txt}neu.txt; done

Die Text-Datei Eko.txt wurde nicht umbenannt da diese nicht mit dem Buchstaben B beginnt, die Bild-Datei Bild-green.png wurde nicht umbenannt da diese nicht die Endung .txt hat.

for i in R*.txt; do mv $i 2${i%neu.txt}.txt; done

Bei dieser Umbenennung wurde aus den Dateinamen von rechts her 
neu.txt 
herausgelöscht.
Fortlaufende Nummern beim Umbenennen kann man ebenfalls mit Hilfe von Schleifen vergeben, wenn man eine Variable mitzählen läßt. Bei der folgenden Eingabe werden alle Dateien umbenannt. Dem neuen Namen wird vorangestellt zw und dann folgt eine durchlaufende Nummerierung mit der Endung .jpg

let a=0; for i in *; do let a=a+1; mv $i zw$a.jpg; done

Hierbei werden auch die txt-Dateien umbenannt in jpg-Dateien (was diese unbrauchbar macht) und auch der Ordner wird umbenannt. Man sollte also vorsichtig sein beim Umbenennen und vielleicht die Originaldateien in einen Bearbeitungsordner kopieren. 

Die Programmschleifen werden erst richtig effektiv wenn eine größere Anzahl Dateien vorhanden ist. Und es ist vorteilhaft wenn die bearbeiteten Dateien unter anderem Namen abgespeichert werden und die Originaldateien noch weiter existieren. Also werden jetzt alle Dateien dieses Ordners gelöscht und man gibt ein

convert -size 30x30 xc:red -duplicate 19 %02d.png

Damit erzeugt man Dateien mit zweistelliger Nummerierung. 

convert unterstützt viele Bildformate und man kann ein Bild 
B.FORMAT1
schnell in ein anderes Format übersetzen (mit anderem Namen oder dem gleichen Namen) 
D.FORMAT2
durch
convert B.FORMAT1 D.FORMAT2
Also konkret
convert B.bmp D.png
convert B.png D.gif
convert B.gif D.jpg
usw. Alleine die Endung FORMAT2 der Ausgabe-Datei D veranlasst ImageMagick zur Konvertierung der Eingabedatei B.FORMAT1
Damit lassen sich auch innerhalb eines Ordners viele Dateien gleichzeitig konvertieren z.B. von png zu gif durch

for i in *.png; do convert $i Y${i%.png}.gif; done

Nun sollen diese roten Quadrat-Dateien mit dem Dateinamen beschriftet werden (gefüllt mit schwarzer Schriftfarbe, der Schriftart FreeSerif in der Schriftgröße 24 und zentrierter Ausrichtung) 

for i in *.png; do convert $i -fill black -font FreeSerif -pointsize 24 -gravity center -draw "text 0,0 '${i%.png}'" Zahl${i%.png}.png; done

Nun kann man daraus mit ImageMagick ein Zahlengif machen mit 

convert Z*.png -set delay 50 -loop 0 bsp01.gif

Dabei wird jedes Bild mit einer Zeitdauer von 50 cs angezeigt und das gif wird ständig wiederholt (-loop 0). 
Nun werden die Zahlenbilder der Reihe nach um jeweils 90 Grad gedreht 

let a=0; for i in Z*.png; do let a=a+1; let b=a*90; convert $i -rotate $b Dreh${i%.png}.png; done

Und jetzt wird wieder ein Zahlengif gemacht

convert D*.png -set delay 50 -loop 0 bsp02.gif

Ein weiterer Bearbeitungsbefehl 

let a=0; for i in Z*.png; do let n=10*a; let m=30*a; let a=a+1; convert -size 600x220 xc:green $i -geometry +$m+$n -composite E${i%.png}.png; done

Und jetzt wird wieder ein gif gemacht

convert E*.png -set delay 50 -loop 0 bsp03.gif

Man kann auch die Z*.png Bilder benutzen um nur die Bildanzahl 20 zu verwenden und ein ganz anderes Bild zu bearbeiten 

let a=0; for i in Z*.png; do let n=18*a; let a=a+1; convert Zahl06.png -background none -rotate $n F${i%.png}.png; done

Durch die Drehung ändert sich bei den Bildern jeweils die Bildgröße und diese soll nun wieder einheitlich gemacht werden 

for i in F*.png; do convert -size 60x60 xc:red $i -gravity center -composite G${i%.png}.png; done

Und jetzt wird wieder ein gif gemacht

convert G*.png -set delay 10 -loop 0 bsp04.gif

Um weitere Bewegungen für eine einzelne Zahl zu erzeugen kann man diese in einen größeren Bereich setzen, z.B. für Zahl18

convert -size 90x90 xc:red Zahl18.png -gravity center -composite A18.png

Neue Bearbeitungsbefehle

let a=0; for i in Z*.png; do let b=3*a; let a=a+1; convert A18.png -crop 30x30+$b+30 +repage H${i%.png}.png; done

Und wieder ein weiteres gif

convert H*.png -set delay 10 -loop 0 bsp05.gif

Wieder neue Bearbeitungsbefehle

let a=0; for i in Z*.png; do let b=3*a; let a=a+1; convert A18.png -crop 30x30+30+$b +repage K${i%.png}.png; done

Und wieder ein weiteres gif

convert K*.png -set delay 10 -loop 0 bsp06.gif

Wieder andere Bearbeitungsbefehle

let a=0; for i in Z*.png; do let b=3*a; let a=a+1; convert A18.png -crop 30x30+$b+$b +repage L${i%.png}.png; done

Und wieder ein anderes gif

convert L*.png -set delay 10 -loop 0 bsp07.gif



Mit wenigen Terminal-Eingaben kann man Animationen erstellen. Hier noch einige Beispiele







zur Übersicht

nächste Seite