Digitale Bilder, ein Wikibuch/Download: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Neuanlage)
 
(Überarbeitung)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
 +
{{Digitale Fotos Navibox}}
 +
 
==<font color="maroon"> Einleitung </font>==
 
==<font color="maroon"> Einleitung </font>==
  
Das hier vorgestellte Bashscript automatisiert das Herunterladen und Speichern der Rohbilder. Die Vorgehensweise ist folgende:
+
wird überarbeitet ....
 
 
* 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...
 
 
 
==<font color="maroon"> Das Download-Script </font>==
 
 
 
 
 
<pre>
 
#!/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
 
</pre>
 
 
 
==<font color="maroon"> Wohin mit dem Script </font>==
 
 
 
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.
 
 
 
==<font color="maroon"> Erklärung des Scriptes </font>==
 
 
 
=== Definitionen ===
 
 
 
Hier werden die Variablen gesetzt, die die Verzeichnisstruktur festlegen
 
 
 
=== Verzeichnisstruktur anlegen ===
 
 
 
Die notwendigen Verzeichnisse werden angelegt
 
 
 
=== Funktionen ===
 
 
 
====<font color="gray"> pause () </font>====
 
 
 
Ist nur für die Fehlersuche beim Programmieren notwendig
 
 
 
====<font color="gray"> funktionsabbruch () </font>====
 
 
 
Diese Funktion beendet das Script. Dabei wird eine an der Aussprungstelle definierte Benutzermeldung angezeigt.
 
 
 
====<font color="gray"> benutzerabbruch () </font>====
 
 
 
Hier wird ebenfalls das Script beendet und dabei die in der Funktion enthaltene Meldung angezeigt.
 
 
 
====<font color="gray"> zuweisung_bilder ... () </font>====
 
 
 
Variablenzuweisungen, abhängig von der Kategorie.
 
 
 
====<font color="gray"> neues_verzeichnis () </font>====
 
 
 
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
 
 
 
====<font color="gray"> herunterladen () </font>====
 
 
 
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
 
 
 
<pre>
 
if [ $? != 0 ]
 
then
 
rmdir "$verzeichnis_cr2"/"$verzeichnis_name"
 
funktionsabbruch "Fehler"
 
fi
 
</pre>
 
 
 
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.
 
 
 
====<font color="gray"> laden_erfolgreich () </font>====
 
 
 
anzahl=`find "$verzeichnis_cr2"/"$verzeichnis_name"/* -type f | wc -l`
 
 
 
Es wird nachgesehen, ob tatsächlich Bilder heruntergeladen wurden.
 
 
 
<pre>
 
if (( $anzahl = 0 ))
 
then
 
rmdir "$verzeichnis_cr2"/"$verzeichnis_name"
 
funktionsabbruch "es gibt nichts zum Laden"
 
fi
 
</pre>
 
 
 
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 ===
 
 
 
<pre>
 
auswahl_hauptmenue=`kdialog --caption "Hauptmenue" --geometry 200x250+500+400 --radiolist "Download der Bilder?" \
 
1 "Bilder" on \
 
2 "Bären" off \
 
3 "Negative" off`
 
</pre>
 
 
 
Anzeige des Auswahldialoges für die Kategorien
 
 
 
<pre>
 
if [ $? != 0 ]
 
then
 
benutzerabbruch
 
fi
 
</pre>
 
 
 
Wird im Auswahldialog auf Abbrechen gedrückt, dann bricht das Script auch tatsächlich ab.
 
 
 
<pre>
 
 
 
case $auswahl_hauptmenue in
 
1) zuweisung_bilder
 
neues_verzeichnis
 
herunterladen
 
laden_erfolgreich ;;
 
 
 
2) ...
 
 
 
3) ...
 
esac
 
</pre>
 
 
 
Abhängig davon, welcher Menuepunkt ausgewählt wurde, werden die entsprechenden Funktionen aufgerufen und der Reihe nach abgearbeitet
 
 
 
kdialog --msgbox "fertig"
 
exit
 
 
 
Fertig
 
 
 
==<font color="maroon"> Zusammenfassung </font>==
 
 
 
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.
 
 
 
==<font color="maroon"> Anmerkungen </font>==
 
 
 
 
 
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.
 
  
 
----
 
----

Aktuelle Version vom 31. Januar 2012, 22:43 Uhr