Digitale Bilder, ein Wikibuch/Download

Aus Linupedia.org
Version vom 7. Mai 2011, 19:12 Uhr von Escho (Diskussion | Beiträge) (Neuanlage)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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
  • Script starten
  • Kategorie auswählen, wohin die Bilder gespeichert werden sollen
  • Kamera einschalten
  • Auf OK drücken

Das Bashscript überprüft nun, wieviele Verzeichnisse für Bilderserien in der gewählten Kategorie 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 diesem Zuge werden die Bilddateien auch gleich umbenannt. Geht alles automatisch...

Das Download-Script

#!/bin/bash

# ========================================== Definitionen ==========================================

hauptverzeichnis=$HOME/Bilder

unterverzeichnis_bilder="$hauptverzeichnis"/bilder
unterverzeichnis_negative="$hauptverzeichnis"/negative
unterverzeichnis_baeren="$hauptverzeichnis"/baeren

# =================================== Verzeichnisstruktur erstellen ==================================

mkdir -p "$unterverzeichnis_bilder"/cr2
mkdir -p "$unterverzeichnis_bilder"/jpg
mkdir -p "$unterverzeichnis_bilder"/tif

mkdir -p "$unterverzeichnis_negative"/cr2
mkdir -p "$unterverzeichnis_negative"/jpg
mkdir -p "$unterverzeichnis_negative"/tif

mkdir -p "$unterverzeichnis_baeren"/cr2
mkdir -p "$unterverzeichnis_baeren"/jpg
mkdir -p "$unterverzeichnis_baeren"/tif

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

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

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

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

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

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

# °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Zuweisungen °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

zuweisung_bilder ()
{
verzeichnis_cr2="$unterverzeichnis_bilder"/cr2
verzeichnis_jpg="$unterverzeichnis_bilder"/jpg
verzeichnis_tif="$unterverzeichnis_bilder"/tif
zusatz="bilder"
}

zuweisung_negative ()
{
verzeichnis_cr2="$unterverzeichnis_negative"/cr2
verzeichnis_jpg="$unterverzeichnis_negative"/jpg
verzeichnis_tif="$unterverzeichnis_negative"/tif
zusatz="negative"
}

zuweisung_baeren ()
{
verzeichnis_cr2="$unterverzeichnis_baeren"/cr2
verzeichnis_jpg="$unterverzeichnis_baeren"/jpg
verzeichnis_tif="$unterverzeichnis_baeren"/tif
zusatz="baeren"
}

# °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Download °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

neues_verzeichnis ()
{
verzeichnis_alt=`find "$verzeichnis_cr2"/* -type d | wc -l`
verzeichnis_neu=$((verzeichnis_alt+1))

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

mkdir "$verzeichnis_cr2"/"$verzeichnis_name"
}

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

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


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

#-----Menueauswahl-----

auswahl_hauptmenue=`kdialog --caption "Hauptmenue" --geometry 200x250+500+400 --radiolist "Download der Bilder?" \
	1	"Bilder" on \
	2	"Bären" off \
	3	"Negative" off`
if [ $? != 0 ]
then
	benutzerabbruch
fi

case $auswahl_hauptmenue in
	1)	zuweisung_bilder
		neues_verzeichnis
		herunterladen
		laden_erfolgreich ;;

	2)	zuweisung_baeren
		neues_verzeichnis
		herunterladen
		laden_erfolgreich ;;

	3)	zuweisung_negative
		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 irgendwo im persönlichen User-Verzeichnis gespeichert. Ich habe, wie aus dem Start-Script ersichtlich ist, folgende Textdatei dazu genommen:

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

Diese Textdatei muß ausführbar gemacht werden.

Erklärung des Scriptes

Definitionen

Hier werden die Variablen gesetzt, die die Verzeichnisstruktur festlegen

Verzeichnisstruktur anlegen

Die notwendigen Verzeichnisse werden angelegt

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.

zuweisung_bilder ... ()

Variablenzuweisungen, abhängig von der Kategorie.

neues_verzeichnis ()

verzeichnis_alt=`find "$verzeichnis_cr2"/* -type d | wc -l`

Es wird nachgesehen, wieviele Verzeichnisse für Bilderserien (cr2) in der gewählten Kategorie 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 "$verzeichnis_cr2"/"$verzeichnis_name"

Das neue Verzeichnis für die Rohbilder wird angelegt

herunterladen ()

cd "$verzeichnis_cr2"/"$verzeichnis_name"

Es wird in das das neue Bildverzeichnis gewechselt

gphoto2 --get-all-files --filename %04n_"$zusatz""$verzeichnis_name".%C

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

if [ $? != 0 ]
then
	rmdir "$verzeichnis_cr2"/"$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 "$verzeichnis_cr2"/"$verzeichnis_name"/* -type f | wc -l`

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

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

Wenn keine Bilder heruntergeladen worden sind, war nichts auf der Speicherkarte drauf. Das Script wird mit einer entsprechendn Meldung beendet, nachdem das neue Verzeichnis gelöscht wurde.

Hauptprogramm

auswahl_hauptmenue=`kdialog --caption "Hauptmenue" --geometry 200x250+500+400 --radiolist "Download der Bilder?" \
	1	"Bilder" on \
	2	"Bären" off \
	3	"Negative" off`

Anzeige des Auswahldialoges für die Kategorien

if [ $? != 0 ]
then
	benutzerabbruch
fi

Wird im Auswahldialog auf Abbrechen gedrückt, dann bricht das Script auch tatsächlich ab.


case $auswahl_hauptmenue in
	1)	zuweisung_bilder
		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

Zusammenfassung

Nochmal eine Zusammenfassung dessen, was passiert:

Wenn ich die Kamera an einen USB-Anschluss des PC´s anschließe und einschalte, wird durch das Hotplugging-System (udev) die Kamera erkannt. Sobald sie erkannt wurde, sorgt die udev-Regel dafür, daß ein Script gestarten wird. Dieses Script öffnet ein Terminal, in dem dann das von ihm nun gestartete eigentliche Download-Script ausgeführt wird.

Das Downloadscript legt, wenn noch nicht vorhanden, die Verzeichnisstruktur für die Fotos fest. Es wird ein neues Verzeichnis definert und erzeugt, in das die Bilder von der Kamera heruntergeladen werden.

Und das Ganze läuft vollkommen automatisch nach einem festgelegten Schema ab.

Anmerkungen

Ich möchte darauf hinweisen, daß ich das 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. 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