chris109
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
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)
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
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)
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
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
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)
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
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
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)
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
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
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)
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
Wohnort: Kempten
|
$0, $1, ... , $n sind ebenfalls vorgegeben. Das sind die Übergebenen Parameter, bzw. $0 ist der Name des Scripts
|
Bat
Anmeldungsdatum: 22. April 2006
Beiträge: 953
|
Hallo chris109, danke, jetzt habe ich es verstanden ☺ Grüße, Bat
|
chris109
(Themenstarter)
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
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
Anmeldungsdatum: 27. Juni 2005
Beiträge: 5244
Wohnort: Bochum
|
Hallo! chris109 schrieb:
„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)
Anmeldungsdatum: 12. Juni 2006
Beiträge: 374
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.
|