Digitale Bilder, ein Wikibuch/Download

Aus Linupedia.org
Wechseln zu: Navigation, Suche
Digitale Bilder, ein Wikibuch: Verzeichnisstruktur - Bilder laden: das Script



Einleitung

Das hier vorgestellte Bashscript automatisiert das Herunterladen und Speichern der Rohbilder. Die Vorgehensweise ist folgende:

  • Kamera mit einem USB-Kabel mit dem PC verbinden und einschalten
  • Das Script startet automatisch (wie, das erkläre ich im nächsten Kapitel des Wiki-Buches) oder man startet es mit Hilfe einer Desktop-Datei
  • Kategorie auswählen, wohin die Bilder gespeichert werden sollen
  • Auf OK drücken

Das Bashscript überprüft nun, wieviele Verzeichnisse für Bilderserien in der gewählten Kategorie im aktuellen Jahr bereits existieren und generiert ein neues Verzeichnis für die neuen Fotos. Dieses Verzeichnis erhält die nächstfreie fortlaufende Nummer als Namen (4stellig mit führenden Nullen). Anschließend werden die Bilder von der Kamera geholt und in dem neuen Verzeichnis gespeichert. In dem Zug werden die Bilddateien auch gleich umbenannt. Geht alles automatisch...

Das Download-Script

#!/bin/bash

# =========================================== Vorbereitungen =========================================

# °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Definitionen °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

rohverzeichnis=$HOME/Bilder/RAW

kategorie_1=Archiv
kategorie_2=Baeren
kategorie_3=Sonstiges

jahr=`date +%Y`

# ============================================== Funktionen ===========================================

# °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Debug °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

pause ()
{
kdialog --msgbox "pause"
}

# °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Abbruch °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

funktionsabbruch ()
{
kdialog --msgbox "$1"
exit
}

benutzerabbruch ()
{
kdialog --msgbox "Abbruch durch den Benutzer"
exit
}

# °°°°°°°°°°°°°°°°°°°°°°°°° Neues Download-Verzeichnis ermitteln und erstellen  °°°°°°°°°°°°°°°°°°°°°°°°°°

neues_verzeichnis ()
{

jahrverzeichnis="$rohverzeichnis"/"$kategorie"/"$jahr"
mkdir -p "$jahrverzeichnis"

verzeichnis_alt=`find "$jahrverzeichnis"/* -maxdepth 0 -type d | wc -w`
verzeichnis_neu=$((verzeichnis_alt+1))

verzeichnis_name=`printf "%.4i" $verzeichnis_neu`

mkdir "$jahrverzeichnis"/"$verzeichnis_name"
}

# °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°  Bilder herunterladen °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

herunterladen ()
{
cd "$jahrverzeichnis"/"$verzeichnis_name"
gphoto2 --get-all-files --filename "$kategorie"-"$jahr"-"$verzeichnis_name"_Photo-%04n.%C
if [ $? != 0 ]
then
	rmdir "$jahrverzeichnis"/"$verzeichnis_name"
	funktionsabbruch "Fehler"
fi
}

# °°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Gibt es überhaupt etwas zum Herunterladen? °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

laden_erfolgreich ()
{
anzahl=`find "$jahrverzeichnis"/"$verzeichnis_name"/* -type f | wc -l`
if (( $anzahl == 0 ))
then
	rmdir "$jahrverzeichnis"/"$verzeichnis_name"
	funktionsabbruch "es gibt nichts zum Laden"
fi
}

# ================================================= Hauptprogramm =======================================

auswahl_hauptmenue=`kdialog --caption "Herunterladen der Bilder" --geometry 400x400+400+300 --radiolist "Wohin mit den Photos?" \
	1	"$kategorie_1" on \
	2	"$kategorie_2" off \
	3	"$kategorie_3" off`
if [ $? != 0 ]
then
	benutzerabbruch
fi

case $auswahl_hauptmenue in
	1)	kategorie="$kategorie_1"
		neues_verzeichnis
		herunterladen
		laden_erfolgreich ;;

	2)	kategorie="$kategorie_2"
		neues_verzeichnis
		herunterladen
		laden_erfolgreich ;;

	3)	kategorie="$kategorie_3"
		neues_verzeichnis
		herunterladen
		laden_erfolgreich ;;
		
esac

kdialog --msgbox "fertig"
exit

Wohin mit dem Script

Dieses Script wird z.B. mit kate in einer einfachen Textdatei gespeichert. Bei mir ist das:

$HOME/Scripte/Foto/Herunterladen/aktuell/bilder_laden

Die Textdatei muß ausführbar gemacht werden, wenn der automatische Scriptstart über die udev-Regel verwendet wird

Erklärung des Scriptes

Definitionen

  • Festlegung der Verzeichnisstruktur für die Rohbilder
  • Aktuelles Jahr ermitteln


Funktionen

pause ()

Ist nur für die Fehlersuche beim Programmieren notwendig

funktionsabbruch ()

Diese Funktion beendet das Script. Dabei wird eine an der Aussprungstelle definierte Benutzermeldung angezeigt.

benutzerabbruch ()

Hier wird ebenfalls das Script beendet und dabei die in der Funktion enthaltene Meldung angezeigt.

neues_verzeichnis ()

jahrverzeichnis="$rohverzeichnis"/"$kategorie"/"$jahr"
mkdir -p "$jahrverzeichnis"
  • Zusammensetzen des Namens für das Jahrverzeichnis.
  • Erzeugen des Verzeichnisses mit allen notwendigen Mutterverzeichnissen
verzeichnis_alt=`find "$jahrverzeichnis"/* -maxdepth 0 -type d | wc -w`

Es wird nachgesehen, wieviele Verzeichnisse im aktuellen Jahr schon existieren

verzeichnis_neu=$((verzeichnis_alt+1))

Zum Ergebnis wird 1 dazugezählt

verzeichnis_name=`printf "%.4i" $verzeichnis_neu`

Das neue Ergebnis wird 4stellig mit führenden Nullen formatiert

mkdir "$jahrverzeichnis"/"$verzeichnis_name"

Das neue Bildverzeichnis wird angelegt

herunterladen ()

cd "$verzeichnis_cr2"/"$verzeichnis_name"

Es wird in das das neue Bildverzeichnis gewechselt (Ist notwendig für gphoto2)

gphoto2 --get-all-files --filename "$kategorie"-"$jahr"-"$verzeichnis_name"_Photo-%04n.%C

Die Fotos werden von der Kamera in das Bildverzeichnis geladen und dabei gleich umbenannt nach dem bereits erläuterten Schema

if [ $? != 0 ]
then
	rmdir "$jahrverzeichnis"/"$verzeichnis_name"
	funktionsabbruch "Fehler"
fi

Tritt beim laden ein Fehler auf, zum Beispiel weil die Kamera nicht bereit ist, dann bricht das Script mit einer Fehlermeldung ab. Das vorhin erzeugte Verzeichnis für die neuen Bilder wird gelöscht.

laden_erfolgreich ()

anzahl=`find "$jahrverzeichnis"/"$verzeichnis_name"/* -type f | wc -l`

Es wird nachgesehen, ob tatsächlich Bilder heruntergeladen wurden.

if (( $anzahl = 0 ))
then
	rmdir "$jahrverzeichnis"/"$verzeichnis_name"
	funktionsabbruch "es gibt nichts zum Laden"
fi

Wenn das nicht der Fall war, also nichts auf der Speicherkarte drauf ist, dann wird das Script mit einer entsprechendn Meldung beendet. Das neu generierte Verzeichnis wird gelöscht.

Hauptprogramm

auswahl_hauptmenue=`kdialog --caption "Herunterladen der Bilder" --geometry 400x400+400+300 --radiolist "Wohin mit den Photos?" \
	1	"$kategorie_1" on \
	2	"$kategorie_2" off \
	3	"$kategorie_3" off`

Anzeige des Auswahldialoges für die Kategorien

if [ $? != 0 ]
then
	benutzerabbruch
fi

Wird im Auswahldialog auf Abbrechen gedrückt, dann beendet sich das Script.


case $auswahl_hauptmenue in
	1)	kategorie="$kategorie_1"
		neues_verzeichnis
		herunterladen
		laden_erfolgreich ;;

	2)	...

	3)	...
esac

Abhängig davon, welcher Menuepunkt ausgewählt wurde, werden die entsprechenden Funktionen aufgerufen und der Reihe nach abgearbeitet

kdialog --msgbox "fertig"
exit

Fertig

Scriptstart

Manuell über eine Desktop-Datei

Um dieses Script zu starten, ist es sinnvoll, eine Start-Datei (Desktop-Datei) zu erzeugen. Wie so etwas realisiert werden kann, habe ich hier erläutert:

http://www.linupedia.org/opensuse/K-Men%C3%BC_und_die_Desktop-Dateien

Dabei ist zu beachten, daß das Script in einem Terminal läuft (Läßt sich in der Desktop-Datei festlegen).

Automatisch beim Einschalten der Kamera

Man kann das Script aber auch starten lassen. Und zwar immer dann, wenn man die Kamera an die USB-Buchse angeschlossen und eingeschaltet hat. Die Realisation dieses Gedankens werde ich im nächsten Kapitel des Wiki-Buches zeigen.

Anmerkungen

Ich möchte darauf hinweisen, daß ich das ursprüngliche Script erstmalig unter OpenSuse 11.3 und KDE 4.4 gebaut und getestet habe. Weiter möchte ich sagen, daß dieses Script genau auf meine Bedürfnisse zugeschnitten ist und von mir entsprechend meiner Anforderungen verbessert wurde. Falls ihr es ausprobieren wollt, gerne. Aber bedenkt dabei immer, daß ihr wissen solltet, was ihr macht. Ihr solltet die Funktionsweise des Scriptes genau verstehen, um zu wissen, was geschieht, wenn ihr es startet. Alles, was ihr tut, geschieht auf eure eigene Verantwortung.


Zurück zur Grafik-Übersicht