Suche Script zum Bilder kopieren
Hallo zusammen, ich möchte Bilder von meiner Digicam per Skript automatisch in ein Verzeichnis kopieren bzw. verschieben. Wenn ich die Kamera einstöpsel wird sie nach /media/sda1/ gemounted. Die Bilder sind dann unter /media/sda1/dcim/100_fuji/ zu finden. Folgendes soll nun passieren: Die Bilder (*.jpg) sollen nach /home/user/Bilder/Jahr/Monat/Tag verschoben werden. Dabei soll das Skript überprüfen ob die Ordner Jahr, Monat und Tag existieren und sie, falls nicht vorhanden, neu anlegen. Gleichzeitig sollen die auf der Kamera vorhandenen *.jpg Dateien umbenannt und im Format yyyy_mm_dd_hh_mm_ss.jpg gespeichert werden. Die dazu benötigten Angaben sollen aus den Exif-Headern ausgelesen werden. da ich, was die Shellprogrammierung angeht, hoffnungslos überfordert bin wäre es nett wenn ihr mir Hilfestellung leisten könntet. Ich wäre schon für einen Link auf ein Beispiel-Skript äusserst dankbar! Andreas
Hallo Andreas, On Tue, Dec 16, 2003 at 12:37:30AM +0100, Andreas Kemmer wrote:
ich möchte Bilder von meiner Digicam per Skript automatisch in ein Verzeichnis kopieren bzw. verschieben.
Wenn ich die Kamera einstöpsel wird sie nach /media/sda1/ gemounted. Die Bilder sind dann unter /media/sda1/dcim/100_fuji/ zu finden.
Folgendes soll nun passieren:
Die Bilder (*.jpg) sollen nach /home/user/Bilder/Jahr/Monat/Tag verschoben werden. Dabei soll das Skript überprüfen ob die Ordner Jahr, Monat und Tag existieren und sie, falls nicht vorhanden, neu anlegen. Gleichzeitig sollen die auf der Kamera vorhandenen *.jpg Dateien umbenannt und im Format yyyy_mm_dd_hh_mm_ss.jpg gespeichert werden. Die dazu benötigten Angaben sollen aus den Exif-Headern ausgelesen werden.
da ich, was die Shellprogrammierung angeht, hoffnungslos überfordert bin wäre es nett wenn ihr mir Hilfestellung leisten könntet. Ich wäre schon für einen Link auf ein Beispiel-Skript äusserst dankbar!
<ungetestet> #!/bin/bash DATADIR="/media/sda1/dcim/100_fuji/" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` mkdir -p /home/user/Bilder/${YEAR}/${MONTH}/${DAY} cp ${DATADIR}/*.jpg /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/. #EOF </ungetestet> Ich weiss momentan allerdings keine Lösung die EXIF Header einfach in einem Shellscript auszulesen und habe auch kein Beispielbild. Wenn sich niemand findet der weis wie sowas einfach zu lösen ist kannst du mir ja vielleicht mal einen Link auf so ein Bild schicken. Vielleicht lässt sich ja was basteln Greetings Daniel -- http://www.incredimail.com/english/splash.html :0 # SAY *PLONK* TO BULLSHIT * ^X-Mailer: IncrediMail # find 'em /dev/null # fix 'em and finish 'em
On Tue, Dec 16, 2003 at 01:15:11AM +0100, Daniel Lord wrote:
Hallo Andreas,
On Tue, Dec 16, 2003 at 12:37:30AM +0100, Andreas Kemmer wrote:
ich möchte Bilder von meiner Digicam per Skript automatisch in ein Verzeichnis kopieren bzw. verschieben.
Wenn ich die Kamera einstöpsel wird sie nach /media/sda1/ gemounted. Die Bilder sind dann unter /media/sda1/dcim/100_fuji/ zu finden.
Folgendes soll nun passieren:
Die Bilder (*.jpg) sollen nach /home/user/Bilder/Jahr/Monat/Tag verschoben werden. Dabei soll das Skript überprüfen ob die Ordner Jahr, Monat und Tag existieren und sie, falls nicht vorhanden, neu anlegen. Gleichzeitig sollen die auf der Kamera vorhandenen *.jpg Dateien umbenannt und im Format yyyy_mm_dd_hh_mm_ss.jpg gespeichert werden. Die dazu benötigten Angaben sollen aus den Exif-Headern ausgelesen werden.
da ich, was die Shellprogrammierung angeht, hoffnungslos überfordert bin wäre es nett wenn ihr mir Hilfestellung leisten könntet. Ich wäre schon für einen Link auf ein Beispiel-Skript äusserst dankbar!
<ungetestet> #!/bin/bash DATADIR="/media/sda1/dcim/100_fuji/" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d`
mkdir -p /home/user/Bilder/${YEAR}/${MONTH}/${DAY}
cp ${DATADIR}/*.jpg /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/.
#EOF </ungetestet>
Ich weiss momentan allerdings keine Lösung die EXIF Header einfach in einem Shellscript auszulesen und habe auch kein Beispielbild. Wenn sich niemand findet der weis wie sowas einfach zu lösen ist kannst du mir ja vielleicht mal einen Link auf so ein Bild schicken. Vielleicht lässt sich ja was basteln
Auf sf.net/projects/libexif gibts ein "exif" Programm, was die EXIF tags auf stdout ausgibt. Da kann man evt was mit basteln. Ist auf der 9.0 mit drauf, Paket exif. Ciao, Marcus
On Tue, Dec 16, 2003 at 12:37:30AM +0100, Andreas Kemmer wrote:
ich möchte Bilder von meiner Digicam per Skript automatisch in ein Verzeichnis kopieren bzw. verschieben.
Wenn ich die Kamera einstöpsel wird sie nach /media/sda1/ gemounted. Die Bilder sind dann unter /media/sda1/dcim/100_fuji/ zu finden.
Folgendes soll nun passieren:
Die Bilder (*.jpg) sollen nach /home/user/Bilder/Jahr/Monat/Tag verschoben werden. Dabei soll das Skript überprüfen ob die Ordner Jahr, Monat und Tag existieren und sie, falls nicht vorhanden, neu anlegen. Gleichzeitig sollen die auf der Kamera vorhandenen *.jpg Dateien umbenannt und im Format yyyy_mm_dd_hh_mm_ss.jpg gespeichert werden. Die dazu benötigten Angaben sollen aus den Exif-Headern ausgelesen werden.
da ich, was die Shellprogrammierung angeht, hoffnungslos überfordert bin wäre es nett wenn ihr mir Hilfestellung leisten könntet. Ich wäre schon für einen Link auf ein Beispiel-Skript äusserst dankbar!
nicht die ganze Aufgabe, aber unter www.informatik-vollmer.de/software liegt mein mv-date Script: mv-date - a script to rename or copy files accroding to their modification time welches ich dafür benutze. Ich lade die Bilder von der Kamera mit digikam. Dabei wird das Modifikationsdatum der Dateien auf das Aufnahemdatum gesetzt (macht digikam). Man kann das natürlich auch mit gtkam scriptgesteuert tun. mv-date benutze ich dann so: mv-date -p ich-im-bad IMG89* dann erhalten die Bildedateien den Namen: ich-im-bdas-YYYY-MM-DD:HH:MM:SS.jpg Ok, mal überlegen, ob ich ich die Sache mt den Ordnern einbaue. Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de
da ich, was die Shellprogrammierung angeht, hoffnungslos überfordert bin wäre es nett wenn ihr mir Hilfestellung leisten könntet. Ich wäre schon für einen Link auf ein Beispiel-Skript äusserst dankbar!
<ungetestet> #!/bin/bash DATADIR="/media/sda1/dcim/100_fuji/" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d`
mkdir -p /home/user/Bilder/${YEAR}/${MONTH}/${DAY}
cp ${DATADIR}/*.jpg /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/.
#EOF </ungetestet>
Ich weiss momentan allerdings keine Lösung die EXIF Header einfach in einem Shellscript auszulesen und habe auch kein Beispielbild. Wenn
Also, ich habe gerade mal bei meinen Fuji - Bildern geschaut, dort steht an der Stelle bis ca. Dyte 259 das Datum. Mit head -c 259 dscf0016.jpg | tail -c 20 | sed -e 's/[: ]/_/g' kommt das Datum im gewünschten Sinne formatiert raus. Kann bei anderen Kameras natürlich anders sein, das kann ich hier nicht nachvollziehen. Bei meinen jungfräulichen BIldern funktioniert es zumindest, Du kannst das bei Dir ja mal über die jungfräulichen Bilder drüber laufen lassen: for d in `find . -iname \*jpg -print`; do grep -q "^......Exif" $d && \ head -c 259 $d | \ tail -c 20 | \ sed -e 's/[: ]/_/g' && echo " Ok" || echo " >>> $d Nicht erkannt, Typ: "`head -c 10 $d | \ tail -c 4`;\ done Wenn es geht, dann schreibst Du anstelle des cp: for d in ${DATADIR}/*.jpg; do FNAME=`head -c 259 $d | tail -c 20 | sed -e 's/[: ]/_/g'`.jpg cp $d /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/${FNAME} done Thomas Mack TU Braunschweig, Abt. Informationssysteme
Hallo Zusammen, da ich ja einen Tipp für die erweiterten jpeg Header bekommen habe hier mal noch eine Ergänzung zu meinem Script. <ungetestet> #!/bin/bash DATADIR="/media/sda1/dcim/100_fuji" TARGET="/home/user/Bilder" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` mkdir -p ${TARGET}/${YEAR}/${MONTH}/${DAY} # alt :) # cp ${DATADIR}/*.jpg /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/. # neu cd ${DATADIR} ls | while read PIC do PICDATE=`exif -t 0x9003 "${PIC}" | \ awk '/Value/ {printf("%s_%s\n",$2,$3)}' | tr ':' '_'` mv "${PIC}" ${TARGET}/${YEAR}/${MONTH}/${DAY}/${PICDATE}.jpg done # EOF </ungetestet> Damit sollte auch das Problem mit den unterschiedlichen Datumslängen gelöst sein. :) Greetings Daniel --
What we need is a mailing list, but what would be an appropriate name? Full-Exposure - We believe in tits. -- Robert Ahnemann auf "Full-Disclosure"
Am Montag, 15. Dezember 2003 23:37 schrieb Andreas Kemmer:
da ich, was die Shellprogrammierung angeht, hoffnungslos überfordert bin wäre es nett wenn ihr mir Hilfestellung leisten könntet. Ich wäre schon für einen Link auf ein Beispiel-Skript äusserst dankbar!
doofe Frage, mal "Krename" probiert ? (meine ich nun vollkommen ernst). -- www.stonki.de: the more I see, the more I know....... www.proftpd.de: Deutsche ProFTPD Dokumentation www.krename.net: Der Batch Renamer für KDE www.kbarcode.net: Die Barcode Solution für KDE
Hallo, am Dienstag, 16. Dezember 2003 um 07:41 schrieb Stefan Onken
doofe Frage, mal "Krename" probiert ? (meine ich nun vollkommen ernst).
weil ich heute morgen wenig Zeit hatte: Krename kann mittels KDE Plugins eine grosse Anzahl von META Informationen aus Formaten lesen, die benutzt werden koennen, Verzeichnis- oder Dateinamen zu bilden. Neben der reinen rename Funktion kann krename auch kopieren, verschieben, Links erstellen. Deshalb waere es ggf. moeglich. cu stonki -- Deutsche ProFTP Docs: http://www.proftpd.de, EFNET: #proftpd KDE3 Renamer: http://www.krename.net KDE3 Barcode und Label Solution: http://www.kbarcode.net Just me: http://www.stonki.de
Am Dienstag, 16. Dezember 2003 15:07 schrieb Stefan Onken:
Hallo,
am Dienstag, 16. Dezember 2003 um 07:41 schrieb Stefan Onken
doofe Frage, mal "Krename" probiert ? (meine ich nun vollkommen ernst).
weil ich heute morgen wenig Zeit hatte: Krename kann mittels KDE Plugins eine grosse Anzahl von META Informationen aus Formaten lesen, die benutzt werden koennen, Verzeichnis- oder Dateinamen zu bilden. Neben der reinen rename Funktion kann krename auch kopieren, verschieben, Links erstellen. Deshalb waere es ggf. moeglich.
Danke für den Tipp! Das Tool kannte ich noch nicht. Andreas
Hi Andreas, (Dienstag, 16. Dezember 2003 00:37) Andreas Kemmer schrieb:
Hallo zusammen,
ich möchte Bilder von meiner Digicam per Skript automatisch in ein Verzeichnis kopieren bzw. verschieben.
Wenn ich die Kamera einstöpsel wird sie nach /media/sda1/ gemounted. Die Bilder sind dann unter /media/sda1/dcim/100_fuji/ zu finden.
Folgendes soll nun passieren:
Die Bilder (*.jpg) sollen nach /home/user/Bilder/Jahr/Monat/Tag verschoben werden. Dabei soll das Skript überprüfen ob die Ordner Jahr, Monat und Tag existieren und sie, falls nicht vorhanden, neu anlegen. Gleichzeitig sollen die auf der Kamera vorhandenen *.jpg Dateien umbenannt und im Format yyyy_mm_dd_hh_mm_ss.jpg gespeichert werden. Die dazu benötigten Angaben sollen aus den Exif-Headern ausgelesen werden.
Den Exif-Header kannst du mit dem Programm "jhead" auslesen.
da ich, was die Shellprogrammierung angeht, hoffnungslos überfordert bin wäre es nett wenn ihr mir Hilfestellung leisten könntet. Ich wäre schon für einen Link auf ein Beispiel-Skript äusserst dankbar!
Da gibt es ein Script namens fotocd.sh [1] dieser macht zwar ein bissel mehr als nur Umbenennen aber das mit umbenennen von Jpegs in den Datum-Name klappt ganz gut. Gruß Roman [1] http://www.familie-willems.de/helmut/fotocd.html -- http://www.jesus.de http://www.thehope.de http://www.ec-thueringen.de
Am Dienstag, 16. Dezember 2003 00:37 schrieb Andreas Kemmer: Danke euch allen für die Hilfe.
ich möchte Bilder von meiner Digicam per Skript automatisch in ein Verzeichnis kopieren bzw. verschieben.
Folgendes Skript funktioniert jetzt einwandfrei: #!/bin/bash #Bilder automatisch kopieren # DATADIR="/media/sda1/dcim/100_fuji/" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` mkdir -p /home/user/Bilder/${YEAR}/${MONTH}/${DAY} for d in ${DATADIR}/*.jpg; do FNAME=`head -c 259 $d | tail -c 21 | sed -e 's/[: ]/_/g'`.jpg mv $d /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/${FNAME} done Die Bilder landen da wo sie hingehören und die Karte ist anschliessend leer. Andreas
Am Dienstag, 16. Dezember 2003 15:35 schrieb Andreas Kemmer:
for d in ${DATADIR}/*.jpg; do FNAME=`head -c 259 $d | tail -c 21 | sed -e 's/[: ]/_/g'`.jpg
Oh, gerade noch mal nachgeschaut: eigentlich müsste es tail -c 19 sein: das Datum besteht in meinen jpg-Dateien nur aus 19 Zeichen und nicht 21. Daß es sich gerade nicht auswirkt, ist eher Zufall, muß aber nicht immer so bleiben... Thomas
Am Dienstag, 16. Dezember 2003 15:50 schrieb Thomas Mack:
Am Dienstag, 16. Dezember 2003 15:35 schrieb Andreas Kemmer:
for d in ${DATADIR}/*.jpg; do FNAME=`head -c 259 $d | tail -c 21 | sed -e 's/[: ]/_/g'`.jpg
Oh, gerade noch mal nachgeschaut: eigentlich müsste es tail -c 19 sein: das Datum besteht in meinen jpg-Dateien nur aus 19 Zeichen und nicht 21. Daß es sich gerade nicht auswirkt, ist eher Zufall, muß aber nicht immer so bleiben...
Bei mir scheinen es 21 Zeichen zu sein. Bei tail -c 20 erhalte ich 003_12_17_15_45_07_.jpg als Dateinamen. Andreas
Hallo, Am Tue, 16 Dec 2003, Andreas Kemmer schrieb: [..]
YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d`
mkdir -p /home/user/Bilder/${YEAR}/${MONTH}/${DAY}
DIR="`date '+/home/user/Bilder/%Y/%m/%d/'" mkdir -p "$DIR"
for d in ${DATADIR}/*.jpg; do FNAME=`head -c 259 $d | tail -c 21 | sed -e 's/[: ]/_/g'`.jpg
Alternativ: FNAME="`dd if=$d bs=1 skip=259 count=21 | sed -e 's/[: ]/_/g'`.jpg" Besser waere es aber wohl die Info nicht ueber einen feste Offset in bytes + ner festen Laenge zu holen...
mv $d /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/${FNAME}
mv -i "$d" "${DIR}/${FNAME}" -dnh -- Das NutzNetz. Unendliche Weiten. Dies sind die Abenteuer der Netizen, die seit Jahren unterwegs sind, um neue Postings zu erforschen. Viele Lichtjahre vom RealLife entfernt dringen sie in Gabeln vor, die nie ein Newbie zuvor gesehen hat. -- geklaut von herbert in suse-talk
Am Dienstag, 16. Dezember 2003 15:35 schrieb Andreas Kemmer:
Folgendes Skript funktioniert jetzt einwandfrei:
#!/bin/bash #Bilder automatisch kopieren #
DATADIR="/media/sda1/dcim/100_fuji/" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d`
mkdir -p /home/user/Bilder/${YEAR}/${MONTH}/${DAY}
for d in ${DATADIR}/*.jpg; do FNAME=`head -c 259 $d | tail -c 21 | sed -e 's/[: ]/_/g'`.jpg mv $d /home/user/Bilder/${YEAR}/${MONTH}/${DAY}/${FNAME} done
Die Bilder landen da wo sie hingehören und die Karte ist anschliessend leer.
Dir ist klar, dass evtl. bereits existierende Bilder mit dem gleichen Namen im Zielverzeichnis kommentarlos überschrieben werden? Benutze lieber wie von David vorgeschlagen mv -i Jan
Am Dienstag, 16. Dezember 2003 22:12 schrieb Jan Trippler:
Dir ist klar, dass evtl. bereits existierende Bilder mit dem gleichen Namen im Zielverzeichnis kommentarlos überschrieben werden? Benutze lieber wie von David vorgeschlagen mv -i
Darüber habe ich mir bisher keine Gedanken gemacht. Allerdings scheint mir die Wahrscheinlichkeit gleicher Namen doch eher theoretisch, da der Dateiname ja das komplette Datum (YYYY_MM_dd_hh_mm_ss) enthält, oder mache ich da gerade einen groben Denkfehler? Ausserdem ist mir gerade aufgefallen, dass ich das Skript immer aus einer Root Konsole aufgerufen habe. Als user funktioniert mv leider nicht. Jetzt sieht das ganze so aus: #!/bin/bash #Bilder automatisch kopieren # DATADIR="/media/sda1/dcim/100_fuji/" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` mkdir -p /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY} for d in ${DATADIR}/*.jpg; do FNAME=`head -c 257 $d | tail -c 19 | sed -e 's/[: ]/_/g'`.jpg cp -i $d /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY}/${FNAME} cd /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY} chmod 644 $FNAME done Frage: Macht die letzte Zeile Sinn oder ist das schlicht überflüssig? Andreas
Am Dienstag, 16. Dezember 2003 23:00 schrieb Andreas Kemmer:
Am Dienstag, 16. Dezember 2003 22:12 schrieb Jan Trippler:
Dir ist klar, dass evtl. bereits existierende Bilder mit dem gleichen Namen im Zielverzeichnis kommentarlos überschrieben werden? Benutze lieber wie von David vorgeschlagen mv -i
Darüber habe ich mir bisher keine Gedanken gemacht. Allerdings scheint mir die Wahrscheinlichkeit gleicher Namen doch eher theoretisch, da der Dateiname ja das komplette Datum (YYYY_MM_dd_hh_mm_ss) enthält, oder mache ich da gerade einen groben Denkfehler?
Wenn die Eindeutigkeit der Dateinamen gewährleistet ist, dann kann auch nichts passieren - dann schadet aber die Option -i auch nichts.
Ausserdem ist mir gerade aufgefallen, dass ich das Skript immer aus einer Root Konsole aufgerufen habe. Als user funktioniert mv leider nicht.
Wahrscheinlich fehlt die *users*-Option für /media/sda? in der /etc/fstab, dann darf auch nur root Dateien dort löschen. man fstab man mount Wenn die Kamera automatisch gemountet wird, hilft vielleicht auch umask bzw. user als Option.
Jetzt sieht das ganze so aus:
#!/bin/bash #Bilder automatisch kopieren #
DATADIR="/media/sda1/dcim/100_fuji/" YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d`
mkdir -p /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY}
for d in ${DATADIR}/*.jpg; do FNAME=`head -c 257 $d | tail -c 19 | sed -e 's/[: ]/_/g'`.jpg cp -i $d /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY}/${FNAME} cd /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY} chmod 644 $FNAME done
Frage: Macht die letzte Zeile Sinn oder ist das schlicht überflüssig?
Sollte eigentlich überflüssig sein, 644 ist in der Regel durch die umask gegeben. Mach mal ein umask wenn dann 022 auftaucht, werden die Dateien mit 644 angelegt.
Am Dienstag, 16. Dezember 2003 23:13 schrieb Jan Trippler:
Wahrscheinlich fehlt die *users*-Option für /media/sda? in der /etc/fstab, dann darf auch nur root Dateien dort löschen.
Asche auf mein Haupt. Das habe ich völlig übersehen: /dev/sda1 /media/sda1 war in fstab überhaupt nicht vorhanden. Jetzt geht's.
cd /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY} chmod 644 $FNAME done
Frage: Macht die letzte Zeile Sinn oder ist das schlicht überflüssig?
Sollte eigentlich überflüssig sein, 644 ist in der Regel durch die umask gegeben. Mach mal ein umask wenn dann 022 auftaucht, werden die Dateien mit 644 angelegt.
Bei mir taucht 0022 auf und die Dateien werden mit 755 angelegt. Ich lass chmod erst mal drin. Funktioniert ja. Allerdings kommt mir gerade ein schreckliche Verdacht, der sich auch prompt bestätigt hat. Das Skript macht doch nicht was ich will. Dieser Teil des Skripts YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` mkdir -p /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY} legt ein Verzeichnis mit dem aktuellen Datum an, in das die Bilder verschoben werden. Dabei ist es egal wie alt die Bilder sind. D. h. Bilder die am 16.12.2003 aufgenommen wurden landen aktuell im Ordner ~/2003/12/17/ Genau das möchte ich aber nicht. Ich möchte, dass Ordner erzeugt werden die dem Aufnahmedatum entsprechen. D. h. wenn ich am 17., 18. und 19.12.2003 Aufnahmen gemacht habe und erst am 22.12.2003 Zeit habe sie abzuspeichern sollen die Bilder in den Ordnern ~/2003/12/17 ~/2003/12/18 ... und nicht in ~/2003/12/22 landen. Wenn ich das richtig verstanden habe liesse sich das ev. mit jhead realisieren. Also Header auslesen und daraus die entsprechenden Verzeichnisse erstellen. Nur bin ich ohne Hilfe einfach zu blöd dazu. In der Hoffnung nicht zu sehr zu nerven Andreas
Hallo, Am Wed, 17 Dec 2003, Andreas Kemmer schrieb: [..]
Allerdings kommt mir gerade ein schreckliche Verdacht, der sich auch prompt bestätigt hat. Das Skript macht doch nicht was ich will.
Dieser Teil des Skripts
YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d`
mkdir -p /home/andreas/Bilder/${YEAR}/${MONTH}/${DAY}
legt ein Verzeichnis mit dem aktuellen Datum an, in das die Bilder verschoben werden. Dabei ist es egal wie alt die Bilder sind.
Korrekt. Gilt genauso fuer die effektivere Version mit nur einem 'date'.
D. h. Bilder die am 16.12.2003 aufgenommen wurden landen aktuell im Ordner ~/2003/12/17/ Genau das möchte ich aber nicht. Ich möchte, dass Ordner erzeugt werden die dem Aufnahmedatum entsprechen. D. h. wenn ich am 17., 18. und 19.12.2003 Aufnahmen gemacht habe und erst am 22.12.2003 Zeit habe sie abzuspeichern sollen die Bilder in den Ordnern ~/2003/12/17 ~/2003/12/18 ... und nicht in ~/2003/12/22 landen.
Wenn ich das richtig verstanden habe liesse sich das ev. mit jhead realisieren. Also Header auslesen und daraus die entsprechenden Verzeichnisse erstellen. Nur bin ich ohne Hilfe einfach zu blöd dazu.
Tja. Jetzt braeuchte ich nur noch jhead und passende Testdateien, dummerweise habe ich weder das eine noch das andere... Ok, also, dass 'jhead' fuer jede Datei aufgerufen werden soll, das scheint wohl klar... Kannst du also mal ein oder zwei Ausgaben von 'jhead' auf eine passende Datei mailen? -dnh -- Fertility is hereditary. If your parents didn't have any children, neither will you.
Am Mittwoch, 17. Dezember 2003 02:25 schrieb David Haller: Hallo David,
Wenn ich das richtig verstanden habe liesse sich das ev. mit jhead realisieren. Also Header auslesen und daraus die entsprechenden Verzeichnisse erstellen. Nur bin ich ohne Hilfe einfach zu blöd dazu.
Tja. Jetzt braeuchte ich nur noch jhead und passende Testdateien, dummerweise habe ich weder das eine noch das andere...
Ok, also, dass 'jhead' fuer jede Datei aufgerufen werden soll, das scheint wohl klar... Kannst du also mal ein oder zwei Ausgaben von 'jhead' auf eine passende Datei mailen?
---------------------8<----------------------------------------------- andreas@peewee:~/Bilder/2003/12/17> jhead test.jpg File name : test.jpg File size : 1479519 bytes File date : 2003:12:17 10:31:50 Camera make : FUJIFILM Camera model : FinePix S5000 Date/Time : 2003:12:17 10:31:50 Resolution : 2816 x 2120 Flash used : Yes Focal length : 15.4mm (35mm equivalent: 104mm) CCD width : 5.35mm Exposure time: 0.017 s (1/60) Aperture : f/5.6 ISO equiv. : 200 Metering Mode: matrix Exposure : program (auto) Jpeg process : Baseline andreas@peewee:~/Bilder/2003/12/17> jhead test2.jpg File name : test2.jpg File size : 1434653 bytes File date : 2003:12:17 10:31:28 Camera make : FUJIFILM Camera model : FinePix S5000 Date/Time : 2003:12:17 10:31:27 Resolution : 2816 x 2120 Flash used : No Focal length : 12.0mm (35mm equivalent: 81mm) CCD width : 5.35mm Exposure time: 0.067 s (1/15) Aperture : f/2.8 ISO equiv. : 200 Metering Mode: matrix Exposure : program (auto) Jpeg process : Baseline -------------------------->8-------------------------------------------- Herzlichen Dank Andreas
Hallo, Am Wed, 17 Dec 2003, Andreas Kemmer schrieb:
Am Mittwoch, 17. Dezember 2003 02:25 schrieb David Haller: [..]
Ok, also, dass 'jhead' fuer jede Datei aufgerufen werden soll, das scheint wohl klar... Kannst du also mal ein oder zwei Ausgaben von 'jhead' auf eine passende Datei mailen?
[..]
andreas@peewee:~/Bilder/2003/12/17> jhead test2.jpg File date : 2003:12:17 10:31:28 Date/Time : 2003:12:17 10:31:27
Ich denke mal, der Zeitpunkt der Aufnahme ist der interessante... Also: ==== DATADIR="/media/sda1/dcim/100_fuji" DESTDIR="/home/user/Bilder" for f in ${DATADIR}/*.jpg do dir="`jhead \"$f\" | \ sed -n \ \"/^Date\/Time/ { s@^[^:]*: \([^ ]\+\) .*@\1@; s@:@/@g; s@^@${DESTDIR}/@; p; }\"` test -n "$dir" || exit 1 test -d "$dir" || mkdir -p "$dir" cp -i "$f" "${dir}/" && rm "$f" done ==== Wenn du die Bilder auch noch umbenennen willst (und nicht nur im passenden Ordner ablegen), dann muesste man noch etwas basteln [2]... Achso, zum sed oben: Erstmal schalten das mit -n die Ausgabe aller Zeilen ab. Dann waehlen wir mit /^Date\/Time/ nur die Zeile aus, auf die diese RE passt, also die mit dem Aufnahmedatum. Aus der Zeile extrahieren wir dann das Datum, ersetzen dann alle ':' im Datum durch '/', setzen ein "${DESTDIR}/" davor und lassen sed dann das Ergebnis mittels 'p' ausgeben. Das Ergebnis landet dann also in der Variablen 'dir' und sieht dann z.B. so aus: cp -i "$f" "/home/user/Bilder/2003/12/17/" HTH, -dnh [2] zum Beispiel: ==== for f in ${DATADIR}/*.jpg do unset dir unset file vars="`jhead \"$f\" | \ sed -n \ \"/^Date\/Time/ { h; s@^[^:]*: \([^ ]\+\) .*@\1@; s@:@/@g; s@^@dir=\\"${DESTDIR}/@; s/$/\\"/; p; g; s@^[^:]*: \([^ ]\+\) \(.*\)@\1_\2@; s/:/_/g; s/^/file=\\"/; s/$/.jpg\\"/; p; }\"`"; eval "$vars"; test -n "$dir" && test -n "$file" || exit 1 test -d "$dir" || mkdir -p "$dir" cp -i "$f" "${dir}/${file}" && rm "$f" done ==== Das ergaebe z.B.: /home/user/Bilder/2003/12/17/2003_12_17_10_31_27.jpg -- 33: Echte NS-Lady Benutzerin von Netscape. (nach de.talk.bizarre)
Am Mi, 2003-12-17 um 18.28 schrieb David Haller: Hallo David,
==== for f in ${DATADIR}/*.jpg do unset dir unset file vars="`jhead \"$f\" | \ sed -n \ \"/^Date\/Time/ { h; s@^[^:]*: \([^ ]\+\) .*@\1@; s@:@/@g; s@^@dir=\\"${DESTDIR}/@; s/$/\\"/; p; g; s@^[^:]*: \([^ ]\+\) \(.*\)@\1_\2@; s/:/_/g; s/^/file=\\"/; s/$/.jpg\\"/; p; }\"`"; eval "$vars"; test -n "$dir" && test -n "$file" || exit 1 test -d "$dir" || mkdir -p "$dir" cp -i "$f" "${dir}/${file}" && rm "$f" done ====
Wunderbar, das funktioniert perfekt. Jubel :-)
Das ergaebe z.B.:
/home/user/Bilder/2003/12/17/2003_12_17_10_31_27.jpg
Gerade getestet: /home/andreas/Bilder/2003/12/17/2003_12_17_20_47_40.jpg /home/andreas/Bilder/2003/12/17/2003_12_17_20_48_09.jpg So habe ich mir das vorgestellt :-)) Ganz herzlichen Dank. Andreas
Hallo, Am Wed, 17 Dec 2003, Andreas Kemmer schrieb:
Am Mi, 2003-12-17 um 18.28 schrieb David Haller: [..] Wunderbar, das funktioniert perfekt. Jubel :-)
Fein :) Brauchst du noch Hilfe das was sed macht zu verstehen? Bis auf h/g ist das ja alles eigentlicht bekannt und leicht in der manpage nachzuschauen, und die s/// solltest du auch selber auseinanderklamuesert bekommen ;)
Ganz herzlichen Dank.
Gern. -dnh -- 63: professionelles Arbeiten Netscape ist nicht auf der Festplatte (Matthias Bruestle)
Am Mi, 2003-12-17 um 21.58 schrieb David Haller:
Hallo,
Am Wed, 17 Dec 2003, Andreas Kemmer schrieb:
Am Mi, 2003-12-17 um 18.28 schrieb David Haller: [..] Wunderbar, das funktioniert perfekt. Jubel :-)
Fein :) Brauchst du noch Hilfe das was sed macht zu verstehen? Bis auf h/g ist das ja alles eigentlicht bekannt und leicht in der manpage nachzuschauen, und die s/// solltest du auch selber auseinanderklamuesert bekommen ;)
Soll ich mal ganz ehrlich sein? Ja? Ok. Ich verstehe nur Bahnhof. Das liegt allerdings daran, dass ich bisher einfach nie die Zeit gefunden habe mich mit der Shell und ihren Möglichkeiten zu beschäftigen. Ich habe mir aber fest vorgenommen das während der Weihnachtsferien nachzuholen. Nochmals herzlichen Dank! Andreas PS: Liesse sich daraus ev. ein KDE Tool ähnlich dem Breeze Downloader (http://www.breezesys.com/Downloader/index.htm) entwickeln? Soetwas wäre für DAUS wie mich, deren Kameras nicht von gphoto unterstützt werden, einfach optimal!
* Dienstag, 16. Dezember 2003 um 00:37 (+0100) schrieb Andreas Kemmer:
Gleichzeitig sollen die auf der Kamera vorhandenen *.jpg Dateien umbenannt und im Format yyyy_mm_dd_hh_mm_ss.jpg gespeichert werden. Die dazu benötigten Angaben sollen aus den Exif-Headern ausgelesen werden.
Wenn es um Exif geht --> 'jhead'!
Z.B. Umbenennen der Jpegs: 'jhead -nf%Y_%m_%d_%H_%M_%S *.jpg' macht
z.B. aus "bild.jpg" "2003_12_16_22_30_45.jpg".
Gruß
Andreas
--
Andreas Könecke "Andreas Koenecke
participants (11)
-
Andreas Kemmer
-
Andreas Koenecke
-
Daniel Lord
-
David Haller
-
Dr. Jürgen Vollmer
-
Jan.Trippler@t-online.de
-
Marcus Meissner
-
Roman Langolf
-
Stefan Onken
-
Stefan Onken
-
Thomas Mack