Aus EasyLinux 04/2011

Alltagsaufgaben mit Skripten beschleunigen

© David Dan Calin, Fotolia

Schnelle Skripte

Ein Themenschwerpunkt Beschleunigung darf die Shell nicht auslassen, denn der Grundtenor unserer Guru-Training-Rubrik ist doch, dass Sie auf der Shell schneller als mit GUI-Tools arbeiten. Wir geben ein paar nützliche Beispiele.

Machen Sie einmal den Schnelligkeitstest: Auf einem frisch installierten Linux-System, dessen Startmenü-Aufbau Sie nicht kennen, suchen Sie den Mailclient Thunderbird und starten ihn. Zum Vergleich drücken Sie [Alt]+[F2] und geben in das sich öffnende Schnellstartfenster thunderbird ein. Nur wenn Sie sehr langsam tippen, ist die Menü-Variante schneller. Falls Sie ohnehin ein Terminalfenster geöffnet haben, können Sie auch noch auf [Alt]+[F2] verzichten und zudem die Auto-Completion-Funktion der Shell nutzen, also z. B. nur thun eingeben und dann [Tab] drücken.

Programmstarts sind keine echten Beispiele für das Arbeiten mit der Shell, sie zeigen aber schön, dass schon die elementarste Funktion einer grafischen Oberfläche (nämlich: das Starten von Programmen) viele unnütze Klicks erfordert. Das ist übrigens kein spezielles Linux-Problem, auch unter Windows und Mac OS wird der Programmstart umständlich, sobald deutlich mehr als die vorinstallierten Anwendungen auf dem Rechner sind (Abbildung 1).

Abbildung 1: Mac OS: Auch wenn die Programmliste im Dock schick aussieht – hier ein Programm zu finden, dauert eine Weile.
Abbildung 1: Mac OS: Auch wenn die Programmliste im Dock schick aussieht – hier ein Programm zu finden, dauert eine Weile.

Schneller mit Skripten

So mächtig die diversen Kommandozeilentools sind – sie lassen sich noch weiter beschleunigen, indem Sie mehrere Befehle in einer Skriptdatei zusammenfassen. Listing 1 zeigt ein Beispiel-Skript, das nach dem Anstöpseln einer Digitalkamera (oder dem Einstecken einer Speicherkarte) automatisch einen neuen Unterordner erzeugt und alle Bilder von der Karte in diesen Ordner verschiebt.

Listing 1

Bilder kopieren

#!/bin/bash
CAMERA=/media/camera/DCIM/100XYZAB
ZIEL=$HOME/Pictures/Import
DATE=$( date +%Y-%m-%d )
mkdir $ZIEL/$DATE
mv -v $CAMERA/* $ZIEL/$DATE/
sync
echo Bilder kopiert.

Schauen wir uns das Listing Zeile für Zeile an:

#!/bin/bash

Die erste Zeile enthält gar keinen Befehl, sondern einen Kommentar; hinter #! steht der Pfad zur Shell (Bash), und damit sagen Sie dem System, dass die Bash das Skript ausführen soll. Diese Zeile sollten Sie an den Anfang jeder Skriptdatei stellen.

CAMERA=/media/camera/DCIM/100XYZAB

Die folgende Zeile definiert eine Variable CAMERA und weist ihr den Wert /media/camera/DCIM zu. Wenn Sie das Skript mit Ihrer eigenen Kamera ausprobieren möchten, müssen Sie diesen Pfad anpassen. Nach dem Anschließen der Kamera wird diese eingebunden. Unterhalb von /media/ finden Sie dann einen neuen Ordner, der meist eine Kurzbezeichnung Ihres Kameramodells oder der Herstellers als Namen trägt. Auf der obersten Ebene des Kameradateisystems gibt es einen Ordner DCIM/, der ein weiteres Unterverzeichnis enthält – im Beispiel 100XYZAB; bei Ihnen wird es anders heißen. Setzen Sie den korrekten Pfad in der obigen Zeile ein, wenn Sie das Skript testen möchten.

ZIEL=$HOME/Pictures/Import

Ähnlich wie CAMERA den Ort speichert, in dem die Bilder auf der Kamera liegen, ist auch ZIEL eine Variable, in die Sie das Verzeichnis eintragen, in welches das Skript die Bilder kopieren soll. In diesem Beispiel gehen wir davon aus, dass es in Ihrem Home-Verzeichnis (das sich über $HOME ansprechen lässt) einen Ordner Pictures gibt – und darin einen Unterordner Import. Falls das nicht der Fall ist, ist es auch nicht tragisch, denn der übernächste Befehl wird diese Verzeichnisse erzeugen.

DATE=$( date +%Y-%m-%d )

Dieses Kommando ist komplexer. Schauen wir zunächst in die Klammern: Dort steht das Kommando date +%Y-%m-%d. Ohne Argumente gibt date das aktuelle Datum und die Uhrzeit aus. Mit den Angaben hinter dem Pluszeichen definieren Sie ein Format – %Y-%m-%d sorgt dafür, dass die Ausgabe im Format 2011-09-30 erfolgt. Würden Sie also in der Shell direkt date +%Y-%m-%d eingeben, würde das Tool das aktuelle Datum im Format 2011-09-30 ausgeben. Die Konstruktion $( ... ) nimmt nun die Ausgabe dieses Befehls und macht daraus ein Argument. Am Anfang steht ja noch der Zuweisungsbefehl DATE=. Das gesamte Kommando schreibt also in die Variable DATE das aktuelle Datum.

mkdir -p $ZIEL/$DATE

Jetzt wird ein neuer Ordner erstellt – der Pfad setzt sich aus $ZIEL, dem Verzeichnistrenner / und $DATE zusammen. Beachten Sie hier, dass Sie beim Setzen einer Variable den Namen ohne Dollarzeichen benutzen, beim Zugriff auf den Inhalt hingegen ein Dollarzeichen voranstellen müssen. Wenn $HOME z. B. den Wert /home/user hat, ergibt sich über die Definitionen von ZIEL und DATE ein Befehl der Form mkdir -p /home/user/Pictures/Import/2011-09-30. Die Option -p für das mkdir-Kommando sorgt dafür, dass eventuell fehlende Verzeichnisse „auf dem Weg“ (also .../Pictures/Import und .../Pictures) gleich mit erzeugt werden, so dass dieses Kommando nicht fehlschlagen kann.

mv -v $CAMERA/* $ZIEL/$DATE/

Das vorvorletzte Kommando verschiebt dann alle Dateien im Bilderordner der Kamera in den Bilderordner auf Ihrer Festplatte; die Option -v sorgt dafür, dass mv die Namen aller verschobenen Dateien auf der Konsole ausgibt, damit Sie den Fortschritt verfolgen können.

sync

Mit sync sorgen Sie schließlich dafür, dass Sie nach Ausführen des Skripts die Kamera einfach abstöpseln können, ohne Datenverlust zu riskieren.

echo Bilder kopiert.

Zum Schluss gibt es noch eine Statusmeldung. Damit Sie das Skript verwenden können, speichern Sie es (z. B. als copycam.sh in Ihrem Home-Verzeichnis) und machen es mit

chmod a+x copycam.sh

ausführbar. Dann können Sie es später mit

EasyLinux 04/2011 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: