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 |