ubuntuusers.de

Skript zum Import von Fotos von der Kamera

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

chris109

Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

Das Skript überträgt beim Anschluss einer Kamera alle Bilder auf den Computer und löscht diese bei Bedarf auch von der Kamera.

Hintergrund:

Ich betreue einige Nutzer, die technisch nich besonders fit sind. Für diese kommt F-Spot zur Foto-Verwaltung nicht in Frage, weil es zu umfangreich ist. Ihnen reicht der Dateimanager und der normale Bildbetrachter vollkommen.

Für diese Leute habe ich ein Skript geschrieben, welches ich bei Nautilus (Einstellungen > Datenträger) für Fotos (Kameras) als Default-Aktion eingestellt habe.

Es Funktioniert mit Kameras die als Wechseldatenträger erkannt werden, wie auch bei solchen, die das Picture Transfer Protokoll verwenden. Bei letzteren ist das Löschen der Bilder auf der Kamera aber nicht möglich.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash

# === Configuration ===

PHOTODIR=$HOME"/Bilder/"
MOVIEDIR=$HOME"/Videos/"

# === Localisation ===

STR_ASKTRANS_TITLE="Kamera angeschlossen"
STR_ASKTRANS_TEXT="Möchten Sie alle Bilder und Filme von der Kamera auf den PC <b>übertragen</b>?"

STR_ASKDEL_TITLE="Übertragung abgeschlossen"
STR_ASKDEL_TEXT="Die Daten wurden auf den PC übertragen.\n\nMöchten Sie jetzt alle Bilder und Filme von der Kamera <b>löschen</b>?"

STR_SAYDONE_TITLE="Löschen abgeschlossen"
STR_SAYDONE_TEXT="Alle Bilder und Filme wurden von der Kamera gelöscht. Sie können die Kamera jetzt vom PC trennen."

# ============
# *** Main ***
# ============
MOUNTPOINT="$1"

if [ ! $# -eq 1 ]; then
	echo "Usage: $0 <MOUNTPOINT>"
	exit 1
fi

if [ ! -d "$MOUNTPOINT" ]; then
	echo "Error: $MOUNTPOINT is not a directory."
	exit 1
fi;

if (zenity --question --title="$STR_ASKTRANS_TITLE" --text="$STR_ASKTRANS_TEXT"); then

	find "$MOUNTPOINT" -iname "*.jpg" -type f -exec cp '{}' $PHOTODIR \; 
	find "$MOUNTPOINT" -iname "*.avi" -type f -exec cp '{}' $MOVIEDIR \;

	if (zenity --question --title="$STR_ASKDEL_TITLE" --text="$STR_ASKDEL_TEXT"); then
		find "$MOUNTPOINT" -iname "*.jpg" -type f -exec rm '{}' \; 
		find "$MOUNTPOINT" -iname "*.avi" -type f -exec rm '{}' \;
		zenity --info --title="$STR_SAYDONE_TITLE" --text="$STR_SAYDONE_TEXT"
	fi
fi
exit 0

Drache

Anmeldungsdatum:
5. April 2007

Beiträge: 2377

Hi Chris109,

1. Ist das eine Frage? Also im Sinne von: „wie bekomme ich das auch bei PICT-Bridge zum laufen?“

2. Wenn ich mal davon ausgehe, dass nicht, dann ist so ein Skript im Forum doch verschwendet, weil nächste Woche ist es irgendwo auf Seite Tausend… – wie wär 's statt dessen im Wiki unter Skripte?

3. Schöne Grüße ins Allgäu, ich muss auch mal wieder nach Hause – hier wo ich grade wohne, gibts nur Hügel…

chris109

(Themenstarter)
Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

Drache schrieb:

1. Ist das eine Frage? Also im Sinne von: „wie bekomme ich das auch bei PICT-Bridge zum laufen?“

Nein. Das ist keine Frage. Ich bin mit dem Skript im Moment ganz zufrieden. Ich denke mal, dass sich das Problem mit dem Löschen irgendwann von selbst lösen wird.

2. Wenn ich mal davon ausgehe, dass nicht, dann ist so ein Skript im Forum doch verschwendet, weil nächste Woche ist es irgendwo auf Seite Tausend… – wie wär 's statt dessen im Wiki unter Skripte?

Das ist keine schlechte Idee. Allerdings möchte ich das Skript vorher auf jeden Fall öffentlich zur Diskussion stellen. Es gibt bestimmt noch Möglichkeiten es zu verbessern.

3. Schöne Grüße ins Allgäu, ich muss auch mal wieder nach Hause – hier wo ich grade wohne, gibts nur Hügel…

Danke! Sei mir ebenfalls gegrüßt. ☺

Drache

Anmeldungsdatum:
5. April 2007

Beiträge: 2377

Na gut Skriptdiskussion…

ich persönlich fände es angebracht, wenn man auch noch die Option hätte, die Fotos nicht von der Kamera zu löschen

Außerdem hast du – IMHO – ein Problem wenn die Kamera die Bilder nicht ".jpg" sondern GROSS SCHREIBT – also ".JPG" oder ".JPEG" oder anders schreibt ".jpeg" … oder nicht?

Dann sollte vielleicht noch die Anfrage eingebaut werden, ob Zenity installiert ist, (ganz am Anfang und ggf. einen Installationsbefehl einbauen… oder Textausgabe, "bitte Installieren…")

chris109

(Themenstarter)
Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

Drache schrieb:

Na gut Skriptdiskussion…

ich persönlich fände es angebracht, wenn man auch noch die Option hätte, die Fotos nicht von der Kamera zu löschen

Deshalb fragt das Programm zuerst ob es die Bilder kopieren soll und danach, ob es sie von der Kamera löschen soll.

Außerdem hast du – IMHO – ein Problem wenn die Kamera die Bilder nicht ".jpg" sondern GROSS SCHREIBT – also ".JPG" oder ".JPEG" oder anders schreibt ".jpeg" … oder nicht?

Nein! "-iname" sucht case insesitive, ignoriert also Groß-/Kleinschreibung.

Dann sollte vielleicht noch die Anfrage eingebaut werden, ob Zenity installiert ist, (ganz am Anfang und ggf. einen Installationsbefehl einbauen… oder Textausgabe, "bitte Installieren…")

Ich glaube "zenity" gehört zum Standardumfang einer Ubuntu-Installation, bin mir aber nicht ganz sicher. Eine Abfrage wäre also durchaus sinnvoll.

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Aus ähnlichen Gründen (und weil ganz zu Anfang Ubuntu noch keine Kameras als Massenspeichergeräte unterstützte) habe ich mal ein ganz kleines PyGTK-Programm geschrieben: https://launchpad.net/getmypics

Ich bin irgendwann von Zenity-Skripten abgekommen, weil ich diese aufeinanderfolgenden Abfragen nervig finde. Mit PyGTK kann man einfach alles in einen kleinen Dialog packen, und der Rest ist auch nicht viel umständlicher.

Ich habe das Programm nie weiterentwickelt, aber vielleicht kannst Du für Deine Zwecke ja was damit anfangen.

Liebe Grüße
Fredo

chris109

(Themenstarter)
Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

Fredo schrieb:

Aus ähnlichen Gründen (und weil ganz zu Anfang Ubuntu noch keine Kameras als Massenspeichergeräte unterstützte) habe ich mal ein ganz kleines PyGTK-Programm geschrieben: https://launchpad.net/getmypics

Danke für den Hinweis. - Ich habe mir das Programm mal näher angesehen. - Es passt leider überhaupt nicht zu dem, was ich machen möchte. Zudem verstehe ich noch nicht allzu viel von Python.

Wenn Du mit mir zusammen aber ein Skript entwickeln möchtest, das die Übertragung von Multimedia-Inhalten stark vereinfacht, würde ich mich sehr freuen.

Wir könnten mit Digital-Kameras anfangen. Das wäre im Grunde das gleiche, wie mein Shell-Skript, allerdings in Python mit GTK und ausgefuchster:

Verbesserungen:

  • Es wird nicht gefragt: Kopieren? ja/nein

  • Sondern: Was tun? Bilder betrachten / Auf den Computer kopieren / Auf den Computer verschieben > Wobei auch der Ziel-Ornder verändert werden kann.

  • Die Verschieben-Option wird nur angeboten, wenn ein Schreibzugriff auf die Kamera möglich ist.

  • Beim kopieren/verschieben wird eine Fortschrittsbalken angezeigt.

  • In den Optionen, kann ein Ordnungs-Schema festgelegt werden. z.B.: (%PictureDateYear%/%PictureDateMonth%/%PictureFilename%)

  • Beim Kopieren/Verschieben überprüft er ob die Datei schon vorhanden ist. Falls ja, bildet das Skript von beiden eine Prüfsumme. Unterscheiden sich die beiden, wird für das Bild von der Kamera eine neuer Name festgelegt, so wie es Firefox mit den Downloads macht.

Ich kann mir sehr gut vorstellen, das sich dieses Import-Konzept noch weiter ausbauen lässt. So ließe sich zum Beispiel etwas ähnliches für einen MP3-Player gestalten. Auch für Audio-CDs, DVDs usw. könnte man das ausbauen. Hinzu käme die Möglichkeit, das ganze nicht für den Desktop, sondern für den Media-Center-PC mit Elisa oder XBMC umzusetzen.

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

chris109 schrieb:

Fredo schrieb:

Aus ähnlichen Gründen (und weil ganz zu Anfang Ubuntu noch keine Kameras als Massenspeichergeräte unterstützte) habe ich mal ein ganz kleines PyGTK-Programm geschrieben: https://launchpad.net/getmypics

Danke für den Hinweis. - Ich habe mir das Programm mal näher angesehen. - Es passt leider überhaupt nicht zu dem, was ich machen möchte.

Dann habe ich Dein Anliegen wohl falsch verstanden. Ich dachte, Dein Skript macht in etwa das gleiche.

Zudem verstehe ich noch nicht allzu viel von Python.

Das lässt sich leicht ändern. 😉 Python ist auch nicht schwieriger zu lernen als Bash. Das Programm war damals meine erste Fingerübung zum Lernen von Python, und ich habe es an circa einem Tag geschrieben.

Wenn Du mit mir zusammen aber ein Skript entwickeln möchtest, das die Übertragung von Multimedia-Inhalten stark vereinfacht, würde ich mich sehr freuen.

Leider habe ich nicht so viel Zeit, noch eine Baustelle aufzumachen. Und ich entwickle gerne auch Sachen, die ich selbst gebrauchen kann. Ich dachte nur, dass mein Python-Skript vielleicht Anregungen geben könnte, wie soetwas mit Python umsetzbar wäre.

Wir könnten mit Digital-Kameras anfangen. Das wäre im Grunde das gleiche, wie mein Shell-Skript, allerdings in Python mit GTK und ausgefuchster:

Verbesserungen:

  • Es wird nicht gefragt: Kopieren? ja/nein

  • Sondern: Was tun? Bilder betrachten / Auf den Computer kopieren / Auf den Computer verschieben > Wobei auch der Ziel-Ornder verändert werden kann.

  • Die Verschieben-Option wird nur angeboten, wenn ein Schreibzugriff auf die Kamera möglich ist.

  • Beim kopieren/verschieben wird eine Fortschrittsbalken angezeigt.

  • In den Optionen, kann ein Ordnungs-Schema festgelegt werden. z.B.: (%PictureDateYear%/%PictureDateMonth%/%PictureFilename%)

  • Beim Kopieren/Verschieben überprüft er ob die Datei schon vorhanden ist. Falls ja, bildet das Skript von beiden eine Prüfsumme. Unterscheiden sich die beiden, wird für das Bild von der Kamera eine neuer Name festgelegt, so wie es Firefox mit den Downloads macht.

Diese Dinge ließen sich in Python sicherlich leichter implementieren als in Bash. Vielleicht ist das ja eine Motivation, sich die Sprache mal anzusehen. ☺

Ich kann mir sehr gut vorstellen, das sich dieses Import-Konzept noch weiter ausbauen lässt. So ließe sich zum Beispiel etwas ähnliches für einen MP3-Player gestalten. Auch für Audio-CDs, DVDs usw. könnte man das ausbauen. Hinzu käme die Möglichkeit, das ganze nicht für den Desktop, sondern für den Media-Center-PC mit Elisa oder XBMC umzusetzen.

So richtig ausgefuchst ist es ja aber immer noch nicht. Ich verstehe, dass z.B. der Import-Dialog von F-Spot nicht immer ganz intuitiv ist, und dass deswegen in bestimmten Kontexten eine sehr einfach zu bedienende Alternative Sinn machen kann. Aber ich weiß nicht, ob ich die ganze Funktionalität von Rhythmbox etc. unbedingt duplizieren würde. Ist das da nicht schon ganz gut realisiert?

Liebe Grüße
Fredo

chris109

(Themenstarter)
Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

Fredo schrieb:

So richtig ausgefuchst ist es ja aber immer noch nicht. Ich verstehe, dass z.B. der Import-Dialog von F-Spot nicht immer ganz intuitiv ist, und dass deswegen in bestimmten Kontexten eine sehr einfach zu bedienende Alternative Sinn machen kann. Aber ich weiß nicht, ob ich die ganze Funktionalität von Rhythmbox etc. unbedingt duplizieren würde. Ist das da nicht schon ganz gut realisiert?

Ich fürchte, da hast Du etwas zu viel in meine Ausführungen rein interpretiert. Die zuvor angesprochenen Punkte würde ich gerne realisieren. Denn F-Spot ist wirklich nicht das wahre, wenn man nicht täglich damit arbeitet und die erweiterten Funktionen, die das Programm bietet wirklich nutzt. - Deshalb die Foto-Geschichte.

Alles weitere sind nur Möglichkeiten. - Ich denke eine Software immer gerne sehr viel weiter, als es unbedingt Sinn macht, sie zu entwickeln. Das ermöglicht mir sauberer zu arbeiten. Denn wenn man ein Programm nur für einen bestimmten Zweck entwickelt und dann, wenn es Fertig ist anfängt Sachen dazu zu bauen, an die man zuvor nie gedacht hat, rennt man früher oder später damit gegen die Wand.

Bat

Avatar von Bat

Anmeldungsdatum:
22. April 2006

Beiträge: 953

Hallo,

danke zunächst für das Script, ich wusste garnicht, dass man das in der Konfiguration von Nautilus hinterlegen kann.. Könntest Du bitte die Zeilen 24 bis 32 kurz erklären? Ich blicke da irgendwie nicht durch, was da genau passiert:

Was ist <MOUNTPOINT> ? (Ist das ein String, der irgendwo einen Pfad zugewiesen bekommt?)

Was heißt: if [ ! $# -eq 1 ] ? (Was ist $# ? was heißt -eq?)

Grüße,

Bat

chris109

(Themenstarter)
Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

  • MOUNTPOINT ist wie der Name schon sagt, das Verzeichnis in dem das Dateisystem der Kamera eingebunden wird.

  • $# ist eine vorgegebene Variable und enthält die Anzahl der übergebenen Parameter

  • $0, $1, ... , $n sind ebenfalls vorgegeben. Das sind die Übergebenen Parameter, bzw. $0 ist der Name des Scripts

  • if [ ! $# -eq 1 ] heißt dann: Wenn nicht genau ein Parameter übergeben wurde. Die eckigen Klammern sind ein Kurzform für "test". Genaueres liefert "man test".

Bat

Avatar von Bat

Anmeldungsdatum:
22. April 2006

Beiträge: 953

Hallo chris109,

danke, jetzt habe ich es verstanden ☺

Grüße,

Bat

chris109

(Themenstarter)
Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

Hallo Leute!

Ich habe das Skript nochmal überarbeitet. Die wichtigsten Änderungen sind

  • Der Benutzer bekommt eine visuelle Rückmeldung während das Skript arbeitet.

  • Die Knöpfe in den Fragedialogen sind jetzt mit "Ja" und "Nein" beschriftet.

  • Das Skript fragt nicht mehr ob es die Bilder von der Kamera löschen soll, wenn diese schreibgeschützt eingebunden ist.

PictureTransfer

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash
# ##############################################################################
# Name: PictureTransfer
# Description: This Script is ment to be called by the Gnome Volume Manager
#              as soon as it detects a digital photo camera.
#              The Script asks the user to transfer all pictures and videos
#              to a pre defined directoy.
# Author: Christian Beuschel <chris109(at)web.de>
# Licence: GPL v3
# Requirements: zenity
# ##############################################################################

# === Configuration ===

MOUNTPOINT="$1"
PHOTODIR=$HOME"/Bilder/"
MOVIEDIR=$HOME"/Videos/"

# === Localisation ===

OK_LABEL="Ja"
CANCEL_LABEL="Nein"

STR_ASKTRANS_TITLE="Kamera angeschlossen"
STR_ASKTRANS_TEXT="Möchten Sie alle Bilder und Filme von der Kamera auf den PC <b>übertragen</b>?"

STR_PROGRESS_TITLE="Verarbeitung"
STR_PROGRESS_TEXT1="Die Fotos werden von der Kamera (\"$MOUNTPOINT\") nach \"$PHOTODIR\" kopiert ..."
STR_PROGRESS_TEXT2="Die Videos werden von der Kamera (\"$MOUNTPOINT\") nach \"$PHOTODIR\" kopiert ..."
STR_PROGRESS_TEXT3="Die Fotos auf der Kamera (\"$MOUNTPOINT\") werden gelöscht ..."
STR_PROGRESS_TEXT4="Die Videos auf der Kamera (\"$MOUNTPOINT\") werden gelöscht ..."

STR_ASKDEL_TITLE="Übertragung abgeschlossen"
STR_ASKDEL_TEXT="Die Daten wurden auf den PC übertragen.\n\nMöchten Sie jetzt alle Bilder und Filme von der Kamera <b>löschen</b>?"


STR_SAYDONE_TITLE="Vorgang abgeschlossen"
STR_SAYDONE_TEXT1="Alle Bilder und Filme wurden von der Kamera gelöscht. Sie können die Kamera jetzt vom PC trennen."
STR_SAYDONE_TEXT2="Die Daten wurden auf den PC übertragen. Sie können die Kamera jetzt vom PC trennen."

# ============
# *** Main ***
# ============

if [ ! $# -eq 1 ]; then
	echo "Usage: $0 <MOUNTPOINT>"
	exit 1
fi

if [ ! -d "$MOUNTPOINT" ]; then
	echo "Error: $MOUNTPOINT is not a directory."
	exit 1
fi;

if (zenity --question \
	--title="$STR_ASKTRANS_TITLE" \
	--text="$STR_ASKTRANS_TEXT" \
	--ok-label=$OK_LABEL \
	--cancel-label=$CANCEL_LABEL \
); then

	exec 3> >(zenity --progress --title=$STR_PROGRESS_TITLE --percentage=0 --width=300 --pulsate --auto-close --auto-kill )

	echo "# "$STR_PROGRESS_TEXT1 >&3
	find "$MOUNTPOINT" -iname "*.jpg" -type f -exec cp '{}' $PHOTODIR \;

	echo "# "$STR_PROGRESS_TEXT2 >&3
	find "$MOUNTPOINT" -iname "*.avi" -type f -exec cp '{}' $MOVIEDIR \;
 
	if [ -w "$MOUNTPOINT" ]; then
		if (zenity --question \
			--title="$STR_ASKDEL_TITLE" \
			--text="$STR_ASKDEL_TEXT" \
			--ok-label=$OK_LABEL \
			--cancel-label=$CANCEL_LABEL \
		); then

			echo "# "$STR_PROGRESS_TEXT3 >&3
			find "$MOUNTPOINT" -iname "*.jpg" -type f -exec rm '{}' \;

			echo "# "$STR_PROGRESS_TEXT4 >&3
			find "$MOUNTPOINT" -iname "*.avi" -type f -exec rm '{}' \;

			zenity --info --title="$STR_SAYDONE_TITLE" --text="$STR_SAYDONE_TEXT1"
		fi
	else
		zenity --info --title="$STR_SAYDONE_TITLE" --text="$STR_SAYDONE_TEXT2"
	fi
fi
exit 0

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Hallo!

chris109 schrieb:

  • Die Knöpfe in den Fragedialogen sind jetzt mit "Ja" und "Nein" beschriftet.

„Ja“ und „Nein“ entspricht aber nicht guten Grundsätzen für Benutzerinterfaces. Der Text selbst ist aussagelos und kann seine Bedeutung diametral ändern, wenn die Frage anders gestellt wird.

Eher wäre daher etwas wie „Übertragen“ und „Abbrechen“ zu empfehlen.

Liebe Grüße
Fredo

chris109

(Themenstarter)
Avatar von chris109

Anmeldungsdatum:
12. Juni 2006

Beiträge: 375

Wohnort: Kempten

Hallo Fredo!

Der Einwand ist durchaus berechtigt.

Ich habe mich aus folgenden Gründen dazu entschlossen:

  • Das Script ist primär für meinen Vater entworfen

  • Mit "Ja" oder "Nein" antworten entspricht eher seiner Natur

  • Ich predige ihm immer, Meldungen auch wirklich zu lesen, da er sich ja nicht auskennt.

  • Der wesentliche Teil der Frage ist im Dialog fett hervorgehoben, damit keine Missverständnisse auftreten.

Wenn Du das Skript selbst bei jemanden nutzen möchtest, steht es Dir natürlich frei das zu ändern.

Probiere es ruhig mal aus. Ich überlege schon selbst es zu nutzen, obwohl es eigentlich für Nutzer entworfen wurde, die große Schwierigkeiten haben überhaupt eine Datei von einem Datenträger auf den anderen zu kopieren.

Antworten |