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

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Neufassung)
(Überarbeitung)
 
Zeile 3: Zeile 3:
 
==<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 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...
 
 
 
==<font color="maroon"> Das Download-Script </font>==
 
 
 
 
 
<pre>
 
#!/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
 
</pre>
 
 
 
==<font color="maroon"> Wohin mit dem Script </font>==
 
 
 
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
 
 
 
==<font color="maroon"> Erklärung des Scriptes </font>==
 
 
 
=== Definitionen ===
 
 
 
* Festlegung der Verzeichnisstruktur für die Rohbilder
 
* Aktuelles Jahr ermitteln
 
 
 
 
 
=== 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"> neues_verzeichnis () </font>====
 
 
 
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
 
 
 
====<font color="gray"> herunterladen () </font>====
 
 
 
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
 
 
 
<pre>
 
if [ $? != 0 ]
 
then
 
rmdir "$jahrverzeichnis"/"$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 "$jahrverzeichnis"/"$verzeichnis_name"/* -type f | wc -l`
 
 
 
Es wird nachgesehen, ob tatsächlich Bilder heruntergeladen wurden.
 
 
 
<pre>
 
if (( $anzahl = 0 ))
 
then
 
rmdir "$jahrverzeichnis"/"$verzeichnis_name"
 
funktionsabbruch "es gibt nichts zum Laden"
 
fi
 
</pre>
 
 
 
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 ===
 
 
 
<pre>
 
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`
 
</pre>
 
 
 
Anzeige des Auswahldialoges für die Kategorien
 
 
 
<pre>
 
if [ $? != 0 ]
 
then
 
benutzerabbruch
 
fi
 
</pre>
 
 
 
Wird im Auswahldialog auf Abbrechen gedrückt, dann beendet sich das Script.
 
 
 
<pre>
 
 
 
case $auswahl_hauptmenue in
 
1) kategorie="$kategorie_1"
 
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"> Scriptstart </font>==
 
 
 
=== 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.
 
 
 
==<font color="maroon"> Anmerkungen </font>==
 
 
 
 
 
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.
 
  
 
----
 
----

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