Vollautomatisch

Aufgaben mit der Shell automatisieren

07.10.2012 Die Shell erlaubt es Ihnen, Ihr Linux-System über Text-Kommandos zu steuern. Doch warum sollten Sie ein 70er-Jahre-Interface verwenden, wenn doch KDE und Gnome äußerst komfortabel sind und die Bedienung mit der Maus erlauben? Unter anderem wegen der Geschwindigkeit.

Betrachten Sie einmal die folgende Aufgabenstellung: Sie haben in den letzten Jahren eine Reihe von Dokumenten mit LibreOffice und anderen Programmen erstellt und dabei sauber eine Dateinamenskonvention der Form 2012-03-Brief-Finanzamt.odt verwendet. Der Ordner, der diese Dokumente enthält, ist nun aber sehr voll und unübersichtlich geworden – mehr Struktur muss her.

Sie planen, für jedes Jahr einen Ordner (2011, 2012 etc.) und darin jeweils zwölf Unterordner 01 bis 12 für die Monate anzulegen – die Dateien sollen dann in den passenden Ordner wandern und dabei die (danach nicht mehr nötigen) Jahres- und Monatsangaben in den Dateinamen verlieren. Aus der Datei 2012-03-Brief-Finanzamt.odt soll also die Datei Brief-Finanzamt.odt im Unterverzeichnis 03 des Ordners 2012 werden.

Das ist mit einem grafischen Dateimanager wie Dolphin zwar kein Problem: Für das Anlegen der Verzeichnisse wählen Sie im Kontextmenü mehrfach Neu erstellen / Ordner. Steht die neue Ordnerhierarchie, können Sie per Drag & Drop und zwei geöffneten Dolphin-Fenstern alle Dateien an die passende Stelle schieben. Zuletzt bleibt dann nur noch das Umbenennen der Dateien: Sie klicken jede einzeln mit der rechten Maustaste an, wählen aus dem Kontextmenü den Punkt Umbenennen und entfernen im Dateinamen Monat und Jahr (Abbildung 1).

Abbildung 1

Abbildung 1: Zahlreiche Dateien in Dolphin zu verschieben und ihnen neue Namen zu geben, ist eine langwierige Aufgabe.

Falls Sie das mit 300 Dateien machen müssen, die in zwei oder mehr Jahren durchaus zusammenkommen können, sind Sie eine Weile damit beschäftigt, und die Arbeit ist ein wenig nervtötend. Wenn Sie die Taste [F2] zum Umbenennen drücken und mit den Cursortasten von einer Datei zur nächsten springen, können Sie die Arbeit geringfügig beschleunigen – aber viel bringt das nicht.

Auftritt der Shell

Betrachten Sie dagegen die folgenden drei Shell-Kommandos, die Sie in ein über das Startmenü (oder über [Alt]+[F2] und Eingabe von konsole) geöffnetes Terminalfenster eingeben:

cd ~/Dokumente
mkdir -p {2009..2012}/{0{1..9},10,11,12}
for f in 2???-??-*; do mv "$f" "${f:0:4}/${f:5:2}/${f:8}"; done

Diese – zugegeben komplexen – drei Zeilen Text erledigen die Aufgabe automatisiert, ohne weitere Eingriffe. Doch was genau passiert hier?

  1. Das erste Kommando cd ~/Dokumente wechselt innerhalb der Shell in Ihren Dokumente-Ordner. Die Tilde ~ ist dabei eine Abkürzung für Ihr Home-Verzeichnis /home/Benutzername.
  2. Mit dem zweiten Kommando erzeugen Sie auf einen Schlag die gesamte benötigte Verzeichnishierarchie: mkdir steht für "make directory" (Verzeichnis erstellen), und die geschweiften Klammern helfen dabei, automatisch ganz viele Argumente für diesen Befehl zu erzeugen: {2009..2012} wird zu allen Zahlen zwischen 2009 und 2012, alternativ könnten Sie hier auch {2009,2010,2011,2012} schreiben, aber die Variante mit den beiden Punkten ist kürzer. Hinter dem Schrägstrich / folgt ein geschachtelter Ausdruck: Wenn Sie hier einfach {1..12} schreiben würden, ergäbe sich {1,2,3,4,5,6,7,8,9,10,11,12}, mit der Konstruktion 0{1..9} erzeugt die Shell die einstelligen Monatszahlen mit führender 0.

    Den gesamten Ausdruck interpretiert die Shell so, dass Sie alle möglichen Kombinationen der Form 2009/01, 2009/02, …, 2012/12 als Argumente für mkdir verwenden wollen; die Shell führt also tatsächlich das Kommando

    mkdir -p 2009/01 2009/02 2009/03 2009/04 2009/05 2009/06 2009/07 2009/08 2009/09 2009/10 2009/11 2009/12 2010/01 2010/02 2010/03 2010/04 2010/05 2010/06 2010/07 2010/08 2010/09 2010/10 2010/11 2010/12 2011/01 2011/02 2011/03 2011/04 2011/05 2011/06 2011/07 2011/08 2011/09 2011/10 2011/11 2011/12 2012/01 2012/02 2012/03 2012/04 2012/05 2012/06 2012/07 2012/08 2012/09 2012/10 2012/11 2012/12

    aus. Die Version mit geschweiften Klammern ist deutlich schneller zu tippen, und dieser Vorteil würde sich noch vergrößern, wenn Sie neben 2009 bis 2012 noch für weitere Jahre Ordner erzeugen wollten.

    mkdir hat hier noch die Option -p, die dafür sorgt, dass das Tool fehlende "Zwischenverzeichnisse" erzeugt. Versuchen Sie mal, in der Shell mkdir 2020/01 einzugeben: Sie erhalten dann die Fehlermeldung, dass der Ordner 2020 noch nicht existiert. Mit -p erzeugt mkdir dieses fehlende Verzeichnis automatisch, bevor es 2020/01 anlegt.

  3. Der größte Automatisierungsschritt folgt in der letzten Zeile. Es handelt sich bei dem langen Befehl um eine so genannte For-Schleife, die ein Kommando mehrfach ausführt. In diesem Fall sucht die Shell alle Dateien im aktuellen Ordner, die auf das Muster 2???-??-* passen. Das Fragezeichen steht dabei für ein beliebiges Zeichen, das Sternchen für beliebig viele davon. Das Muster erfasst also alle zuvor beschriebenen Dateinamen, z. B. 2012-03-Brief-Finanzamt.odt. Jeden dieser Dateinamen merkt sich die Shell nun für einen Schleifendurchlauf in der Variablen f (was am Code for f in ... liegt). Mit diesem Inhalt führt die Shell dann das Kommando mv "$f" "${f:0:4}/${f:5:2}/${f:8}" aus. Für den Beispieldateinamen 2012-03-Brief-Finanzamt.odt passiert dann Folgendes:
  4. $f ist einfach der Dateiname selbst, im Beispiel wieder 2012-03-Brief-Finanzamt.odt. Er ist das erste Argument für den mv-Befehl, der Dateien umbenennen und verschieben kann. Damit ist schon mal klar, welche Datei mv bearbeiten soll; es fehlt noch das zweite Argument, das hier aus drei Teilen zusammengesetzt wird, die durch Schrägstriche getrennt sind: Los geht es mit ${f:0:4}. Darüber sprechen Sie wieder den Dateinamen an, erhalten aber nur die ersten vier Zeichen – ab Position 0. Die Shell beginnt die Zählung bei 0; die Zeichen 0 bis 3 aus dem Dateinamen ergeben also 2012. Es folgt ein Schrägstrich und danach ${f:5:2} – das funktioniert genauso, liefert aber die Zeichen 5 und 6 (im Beispiel: 03) zurück. Nach einem weiteren Schrägstrich folgt abschließend ${f:8}. Hier fehlt die Längenangabe, was die Shell so interpretiert, dass Sie alle Zeichen ab Nummer 8 verwenden möchten. Für die Beispieldatei ergibt sich also insgesamt das Kommando

    mv "2012-03-Brief-Finanzamt.odt" "2012/03/Brief-Finanzamt.odt"

    Es verschiebt die Datei in den Ordner 2012/03/ und gibt ihr gleichzeitig den neuen Dateinamen Brief-Finanzamt.odt. Danach geht es mit der nächsten Datei weiter, bis alle Dateien am gewünschten Platz stehen.

Die Anführungszeichen um die beiden Argumente herum wären in diesem Fall nicht zwingend nötig gewesen; wenn Sie aber Leerzeichen in Ihren Dateinamen benutzen, müssen Sie mit diesen Zeichen arbeiten: Die Shell mag keine Leerzeichen in Argumenten. Um etwa (als einfachere Aufgabe) die Datei Name mit Blank.txt in Neuer Name.txt umzubenennen, müssten Sie das Kommando

mv "Name mit Blank.txt" "Neuer Name.txt"

verwenden, ohne die Anführungen sieht die Shell in dieser Zeile fünf Argumente (1. Name, 2. mit, 3. Blank.txt, 4. Neuer und 5. Name.txt) für das mv-Kommando und würde versuchen, vier Dateien (die ersten vier Argumente) in einen nicht vorhandenen Ordner namens Name.txt (das fünfte Argument) zu verschieben.

Komplexere Muster

Nun war das Aufgabenbeispiel für die Shell noch leicht gewählt, weil sich in den Beispieldateinamen schon alle Bestandteile (Jahr, Monat, Restname) an der richtigen Stelle befinden. Oft haben Sie es mit einer komplizierteren Situation zu tun. Die Lösung, die Sie hier finden, werden Sie eventuell nicht auf Anhieb verstehen – lassen Sie sich davon aber nicht irritieren, das Ziel der Darstellung ist, Sie von der Leistungsfähigkeit der Shell zu überzeugen. Die vorgestellten Befehle können Sie auch ohne vollständiges Verständnis verwenden und durch ein wenig Experimentieren Ihren eigenen Vorstellungen anpassen.

Etwas umständlicher wird das erste Beispiel etwa, wenn die Dateinamen anfangs die Form Brief-Finanzamt-17.3.2012-Kopie.odt haben: Das Datum steht mitten im Text und hat die Form Tag.Monat.Jahr, wobei Tag und Monat ein- oder zweistellig sein können.

Ein Muster, um solche Dateien in der For-Schleife zu bearbeiten, ist noch relativ schnell gefunden: Wenn Sie in der Shell

ls *-{[1-9],[0-3][0-9]}.{[1-9],[01][0-9]}.20??-*

eingeben, erscheinen alle Dateien mit passenden Namen. Komplizierter wird es, wenn Sie die einzelnen Bestandteile (Tag, Monat, Jahr) aus solchen Dateinamen herausziehen möchten: Das klappt nicht mehr mit demselben Trick wie oben, weil sich die Informationen nicht an einer fixen Stelle im Namen befinden. Stattdessen benötigen Sie so genannte reguläre Ausdrücke, mit denen es möglich ist, Teile eines Musters einzeln anzusprechen. Die folgenden Codezeilen funktionieren nur, wenn in der Shell-Variablen $NAME ein Dateiname gespeichert ist, der dem obigen Muster entspricht, also die Form Vorne-DD.MM.JJJJ-Hinten hat, wobei DD ein ein- oder zweistelliger Tag, MM ein ebenso ein- oder zweistelliger Monat und JJJJ ein vierstelliges Jahr (zwischen 2000 und 2099) ist. Das Muster ist so einfach wie möglich gehalten, passt also auch auf fehlerhafte Datumsangaben wie den 35.13.2012.

MUSTER='\(.*\)-\([0-9][0-9]\?\)\.\([0-9][0-9]\?\)\.\(20..\)-\(.*\)'
VORNE=$(  echo $NAME | sed -e "s|$MUSTER|\1|" )
TAG=$(    echo $NAME | sed -e "s|$MUSTER|\2|" )
MONAT=$(  echo $NAME | sed -e "s|$MUSTER|\3|" )
JAHR=$(   echo $NAME | sed -e "s|$MUSTER|\4|" )
HINTEN=$( echo $NAME | sed -e "s|$MUSTER|\5|" )
test $TAG -le 9 && TAG=0$TAG
test $MONAT -le 9 && MONAT=0$MONAT

Reguläre Ausdrücke

Die erste Zeile weist der Shell-Variablen $MUSTER einen regulären Ausdruck zu. Er enthält etliche Backslashes (Rückwärts-Schrägstriche "\"), die ihn unleserlich machen. In einer vereinfachten (und nicht funktionierenden) Darstellung hat der Ausdruck die Form

.*-[0-9][0-9]?.[0-9][0-9]?.20..-.*

Die einzelnen Teile dieses Ausdrucks haben die folgenden Bedeutungen:

  • .*: Der Punkt steht für ein beliebiges Zeichen, und das Sternchen dahinter bedeutet, dass dieses beliebig oft (auch nie) auftreten darf.
  • -: Das ist einfach das Minuszeichen, das in den Beispieldateinamen vor und hinter dem Datum steht.
  • [0-9]: Wie bei den einfacheren Mustern, welche die Shell versteht (siehe oben), steht [0-9] für eine der Ziffern zwischen 0 und 9.
  • [0-9]?: Das angehängte Fragezeichen ändert diesen Teilausdruck ab; es bewirkt, dass hier entweder eines der Zeichen 0--9 oder nichts erwartet wird. (Zusammengefasst steht also [0-9][0-9]? für eine ein- oder zweistellige Zahl.)
  • 20..: Dies ist schließlich das vereinfachte Muster für eine mit 20 beginnende vierstellige (Jahres-)Zahl (wobei 20.. auch auf die Zeichenkette 20th passt).

In dieser Darstellung tauchen Punkte in zwei Bedeutungen auf: einmal als beliebiges Zeichen und einmal als echter Punkt (im Datum zwischen Tag und Monat sowie zwischen Monat und Jahr). Aus diesem Grund verwendet der korrekte reguläre Ausdruck die Darstellung \. für einen "echten" Punkt. Auch das Fragezeichen muss mit einem Backslash versehen werden. Beachtet man diese Regeln, ergibt sich der Ausdruck

.*-[0-9][0-9]\?\.[0-9][0-9]\?\.20..-.*

welcher dem endgültigen Ausdruck schon stärker ähnelt. Was jetzt noch fehlt, sind die zahlreichen öffnenden und schließenden runden Klammern \(...\), welche Teilausdrücke einklammern. Dadurch kann man später die so erkannten Teile separat ansprechen, als "ersten geklammerten Ausdruck", "zweiten geklammerten Ausdruck" usw., in der Notation regulärer Ausdrücke mit \1, \2 usw.

Wenn es nur darum ginge, die Jahreszahl aus dem Dateinamen herauszuholen, würde es ausreichen, diesen Teilausdruck in Klammern zu setzen, also

.*-[0-9][0-9]\?\.[0-9][0-9]\?\.\(20..\)-.*

Da aber auch die restlichen Teile benötigt werden, gibt es hier insgesamt fünf Teilausdrücke (Namensteil vor dem Datum, Tag, Monat, Jahr, Namensteil nach dem Datum), die durch Klammern markiert werden.

Die Befehle hinter der Musterdefinition rufen alle das Kommando sed auf, das reguläre Ausdrücke versteht. Alle Befehle arbeiten ähnlich und entnehmen dem Dateinamen die fünf Teilausdrücke. Wenn also in $NAME anfangs der Wert Brief-Finanzamt-17.3.2012-Kopie.odt steht, dann gilt nach dem Ausführen der Befehle:

$ echo $VORNE; echo $TAG; echo $MONAT; echo $JAHR; echo $HINTEN
Brief-Finanzamt
17
3
2012
Kopie.odt

(Die echo-Kommandos geben die Inhalte der Variablen aus.) Die letzten beiden Befehle (mit test) dienen nur dazu, Tag und Monat mit einer führenden Null zu versehen, falls diese Zahlen einstellig (zwischen 1 und 9) sind; dazu prüft test, ob der Inhalt der Shell-Variablen $TAG bzw. $MONAT kleiner oder gleich 9 (englisch: less or equal, -le) ist.

Nun ist der Dateiname (der in der Variablen $NAME steht) in seine Bestandteile zerlegt, und diese kann man nach Bedarf verwenden, um daraus Verzeichnis- oder neue Dateinamen zu erstellen. Ist das Ziel wieder, die Dokumente in Unterordner der Form JJJJ/MM zu verteilen und dabei noch umzubenennen, könnten sich z. B. die folgenden Befehle anschließen:

mkdir -p $JAHR/$MONAT
mv "$NAME" "$JAHR/$MONAT/$JAHR-$MONAT-$TAG-$VORNE-$HINTEN"

Damit würde die Datei Brief-Finanzamt-17.3.2012-Kopie.odt in 2012-03-17-Brief-Finanzamt-Kopie.odt umbenannt und in den Ordner 2012/03/ verschoben. Die Anführungszeichen sind wieder notwendig, damit Dateinamen mit Leerzeichen keine Probleme verursachen.

Alle Befehle zusammengefasst und mit einer For-Schleife versehen, die einen ganzen Ordner voller Dateien auf geeignete Unterordner aufteilt, finden Sie in Listing 1, dort gibt es zusätzlich noch eine Abfrage (if ...), die dafür sorgt, dass nur wirklich vorhandene Dateinamen bearbeitet werden. Wenn Sie die Code-Zeilen in eine Datei namens script.sh schreiben, können Sie diese mit

. script.sh

(mit einem Punkt und einem Leerzeichen am Anfang des Befehls) ausführen, und alle Dateien landen am gewünschten Ort. Zusätzlich gibt das Script zu jeder bearbeiteten Datei mit echo aus, was es getan hat. Die Muster im Listing wurden gegenüber der Darstellung im Text noch leicht verändert, so dass es auch mit Dateinamen funktioniert, bei denen auf das Datum direkt die Dateiendung folgt.

Listing 1

Verschieben mit regulären Ausdrücken

for NAME in *-{[1-9],[0-3][0-9]}.{[1-9],[01][0-9]}.20??*; doif test "${NAME:0:1}" != '*'; then
    MUSTER='\(.*\)-\([0-9][0-9]\?\)\.\([0-9][0-9]\?\)\.\(20..\)\?\(.*\)'
    VORNE=$(  echo $NAME | sed -e "s|$MUSTER|\1|" )
    TAG=$(    echo $NAME | sed -e "s|$MUSTER|\2|" )
    MONAT=$(  echo $NAME | sed -e "s|$MUSTER|\3|" )
    JAHR=$(   echo $NAME | sed -e "s|$MUSTER|\4|" )
    HINTEN=$( echo $NAME | sed -e "s|$MUSTER|\5|" )
    test $TAG -le 9 && TAG=0$TAG
    test $MONAT -le 9 && MONAT=0$MONAT
    test $HINTEN = "-" && HINTEN=""
    mkdir -p $JAHR/$MONAT
    mv "$NAME" "$JAHR/$MONAT/$JAHR-$MONAT-$TAG-$VORNE$HINTEN"
    echo $NAME '-->' $JAHR/$MONAT/$JAHR-$MONAT-$TAG-$VORNE$HINTENfidone

Die Abbildungen 2 und 3 zeigen ein Beispielszenario mit acht Dokumenten, die zunächst alle im Ordner Dokumente liegen und nach dem Ausführen des Scripts in Unterverzeichnissen von 2011 und 2012 landen.

Abbildung 2

Abbildung 2: Dateien komplex umbenennen und verschieben – dafür benötigen Sie ein Bash-Script, das mit regulären Ausdrücken arbeitet.

Abbildung 3

Abbildung 3: Das ist das Wunschergebnis: Die Dokumente liegen jetzt nach Jahren und Monaten getrennt in separaten Ordnern und haben besser sortierbare Namen.

Scanner-Kontrast

Zum Abschluss noch ein einfacheres Beispiel aus dem Bereich der Bildbearbeitung: Wenn Sie gelegentlich unter Linux Dokumente einscannen, haben Sie vielleicht auch das Problem, dass die Scans viel zu dunkel werden; das Papier erscheint dann nicht weiß, sondern dunkelgelb bis bräunlich. Drucken Sie es in dieser Form aus (um eine Kopie zu machen), ist auch der Ausdruck unangenehm dunkel und verschwendet Tinte oder Toner.

Scanprogramme wie XSane oder das in der letzten Ausgabe vorgestellte gscan2pdf [1] erlauben es Ihnen zwar, die Kontrast- und Farbeinstellungen für den Scan zu ändern, aber das müssen Sie bei jedem Programmstart erneut erledigen. Für bereits eingescannte Dokumente können Sie den Kontrast nachträglich mit Gimp oder einer anderen Bildbearbeitung anpassen, was lästig ist, wenn Sie zahlreiche Seiten nachbearbeiten müssen.

Die Shell lässt Sie auch hier wieder schneller arbeiten, wenn Sie das Programm convert aus dem imagemagick- (Ubuntu) bzw. ImageMagick-Paket (OpenSuse) installiert haben: Mit diesem Tool können Sie ebenfalls Kontrast- und Farbkorrekturen vornehmen, ohne dafür die Bilder zunächst zu öffnen. Praktisch ist außerdem, dass Sie auf Wunsch direkt eine PDF-Datei im A4-Format erstellen. Alles zusammen erledigt das folgende Kommando:

convert *.jpg -brightness-contrast 25x60 -page A4 ausgabe.pdf

In diesem Beispiel sind 25 und 60 die Parameter für Helligkeit (brightness) und Kontrast; je nach Qualität Ihrer eigenen Scans müssen Sie mit diesen Zahlen ein wenig experimentieren. Die Originalbilder werden nicht verändert, so dass Sie problemlos mehrere Anläufe nehmen können. Der Befehlsaufruf geht davon aus, dass im aktuellen Ordner (in den Sie in der Shell mit cd gewechselt sind) alle eingescannten Dateien liegen und diese die Dateiendung .jpg haben.

convert kann noch viel mehr, ein häufig genutztes Feature ist z. B. das Verkleinern von Bildern, um Thumbnails für eine Webseite zu erstellen oder hochaufgelöste Bilder vor dem Weiterleiten per Mail in eine akzeptable Dateigröße zu zwingen. Dazu dient die Option -resize:

convert original.jpg -resize 800x800 klein.jpg

erzeugt nicht etwa ein quadratisches Bild mit 800 x 800 Pixeln, sondern reduziert die Bildgröße so, dass Breite und Höhe maximal 800 Pixel haben. (Der zweite Wert in 800x800 ist die Höhe.) Listing 2 zeigt ein Beispiel dafür, wobei identify (ebenfalls aus dem ImageMagick-Paket) die Größe von Original und erzeugtem Bild anzeigt.

Listing 2

convert

Die Datei original.jpg hat die Auflösung 2492 x 3480 (Breite x Höhe), convert erzeugt daraus ein verkleinertes Bild mit der neuen Auflösung 573 x 800 – das Seitenverhältnis bleibt erhalten (ca. 1/1,40):

$ convert original.jpg -resize 800x800 kleiner.jpg
$ identify *.jpg
original.jpg JPEG 2492x3480 2492x3480+0+0 8-bit DirectClass 3.843MB 0.000u 0:00.000
kleiner.jpg JPEG 573x800 573x800+0+0 8-bit DirectClass 171KB 0.000u 0:00.000

Um Bildbearbeitungsaufgaben zu automatisieren, können Sie auch spezielle GUI-Tools verwenden, z. B. Phatch (Photo & Batch, Abbildung 4) [2,3], die Arbeit mit Shell-Tools hat aber den Vorteil, dass Sie sich daran gewöhnen, komplexe Shell-Kommandos zusammenzustellen, um Aufgaben schnell zu erledigen. Mehr Informationen zu convert finden Sie in einem älteren EasyLinux-Artikel [4].

Abbildung 4

Abbildung 4: Spezialisierte Anwendungen, wie die Foto-Batch-Verarbeitung Phatch, helfen auch beim Automatisieren eintöniger Aufgaben, sind aber auf den jeweiligen konkreten Zweck eingeschränkt.

Vorsicht bei der Automatisierung

So mächtig Shell-Befehle sind, so gefährlich können sie auch sein: Wenn Sie sich vertippen, entfesseln Sie schnell zerstörerische Kommandos und löschen beispielsweise ganze Verzeichnishierarchien. Darum sollten Sie einige Sicherheitsmechanismen einbauen. Bevor Sie eine Schleife oder Kommandos, die rekursiv arbeiten (d. h., die Dateien in allen Unterordnern anfassen), aufrufen, können Sie die möglichen Auswirkungen mit den folgenden beiden Tipps einschränken:

  1. Erstellen Sie zunächst vom Ordner, den Sie bearbeiten, eine Sicherheitskopie; im Home-Verzeichnis könnten Sie dazu etwa cp -a Dokumente Dokumente.bak eingeben, wenn Sie mit Dateien im Dokumente-Ordner arbeiten möchten.
  2. Setzen Sie vor potenziell riskante Befehle, die Sie in einer Schleife ausführen möchten, in einem ersten Test das Kommando echo, also z. B. echo mv ... statt mv ... – das führt dazu, dass die Shell die eigentlich gewünschten Befehle nicht ausführt, sondern nur (mit echo) in der Konsole ausgibt (Abbildung 5).

    Abbildung 5

    Abbildung 5: Stellen Sie kritischen Kommandos ein "echo" voran, zeigt die Shell die Aktionen an, die sie ohne "echo" ausführen würde.

Fazit

Sie haben nun einige der Möglichkeiten entdeckt, die Shell-Befehle Ihnen bieten. Manches ist dabei vielleicht unverständlich geblieben. Auf unserer Webseite finden Sie viele alte Shell-Artikel in der Rubrik "Guru-Training", mit denen Sie weitere Shell-Kommandos ausprobieren können. Für einen umfassenden Einstieg in die Shell empfehlen wir außerdem die Shell-Kapitel des gratis erhältlichen Buchs "Linux" [5]. Shell-Profi wird man nicht über Nacht, aber wenn Ihnen die Beispiele aus diesem Artikel gefallen haben und Sie Ihre Kenntnisse vertiefen möchten, ist der Grundstein gelegt.

Infos

[1] gscan2pdf-Artikel: Hans-Georg Eßer, "Papierstapel 2 PDF", EasyLinux 03/2012, S. 86 f.,

[2] Phatch: http://photobatch.stani.be/

[3] OpenSuse-Repository für Phatch: http://software.opensuse.org/download.html?project=multimedia:photo&package=phatch

[4] convert-Artikel: Heike Jurzik, "Zauberhafte Bildbearbeitung", EasyLinux 06/2006, S. 89 f., http://www.easylinux.de/2006/06/089-guru-convert/

[5] Shell-Einführung: Johannes Plötner und Steffen Wendzel, "Linux", Galileo Computing 2012, Kapitel 7, http://openbook.galileocomputing.de/linux/linux_kap07_001.html

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare