caiusjuliuscaesar
Anmeldungsdatum: 20. Januar 2009
Beiträge: 307
|
Hallo, ich würde gern automatisch aus Dateinamen, die ich sukzessive in eine Variable $i einlese, in der Bash Informationen ziehen. Gibt es so etwas wie eine PHP-Explode-Funktion, mit der ich auf die Bestandteile eines Dateinamens zugreifen kann? Z. B. Zunächst bis zum Dilimiter "_", dann alles, was sich zwischen Punkten befindet usw.? Gruß, CJC
|
pinguino
Anmeldungsdatum: 6. Februar 2007
Beiträge: 732
Wohnort: BW
|
|
schusch
Anmeldungsdatum: 2. September 2008
Beiträge: 324
Wohnort: Berlin
|
Da gibt es viele Möglichkeiten sed, awk, cut usw. z.B. cut (nach -f die Spalte, nach -d das Begrenzungszeichen):
$ echo bla_fasel.blubber.-noch_mehr_fasel.usw. | cut -f 2 -d '.'
blubber
$ echo bla_fasel.blubber.-noch_mehr_fasel.usw. | cut -f 3 -d '_'
mehr
|
caiusjuliuscaesar
(Themenstarter)
Anmeldungsdatum: 20. Januar 2009
Beiträge: 307
|
pinguino schrieb: Geht es um exiftool?
Genau. Ich will aus den Dateinamen, die vielfach, nicht immer, nach dem Schema jjjj.mm.dd_Bildunterschrift oder jjjj.mm_Bildunterschrift oder jjjj_Bildunterschrift aufgebaut sind, das Datum extrahieren und in das entsprechende exif-Feld schreiben, sowie die Bildunterschrift in IPTC.Caption. Gruß, CJC
|
caiusjuliuscaesar
(Themenstarter)
Anmeldungsdatum: 20. Januar 2009
Beiträge: 307
|
schusch schrieb: Da gibt es viele Möglichkeiten sed, awk, cut usw. z.B. cut (nach -f die Spalte, nach -d das Begrenzungszeichen):
$ echo bla_fasel.blubber.-noch_mehr_fasel.usw. | cut -f 2 -d '.'
blubber
$ echo bla_fasel.blubber.-noch_mehr_fasel.usw. | cut -f 3 -d '_'
mehr
Kann uich die cut-Ausgabe in eine Shellvasriable umleiten etwa:
> $ echo bla_fasel.blubber.-noch_mehr_fasel.usw. | cut -f 3 -d '_' > $i
|
deifl
Anmeldungsdatum: 18. August 2006
Beiträge: 132
Wohnort: Esslingen
|
Kann uich die cut-Ausgabe in eine Shellvasriable umleiten etwa:
> $ echo bla_fasel.blubber.-noch_mehr_fasel.usw. | cut -f 3 -d '_' > $i
Ungetestet 😉: i=$(echo bla_fasel.blubber.-noch_mehr_fasel.usw. | cut -f 3 -d '_')
|
pinguino
Anmeldungsdatum: 6. Februar 2007
Beiträge: 732
Wohnort: BW
|
caiusjuliuscaesar schrieb: pinguino schrieb: Geht es um exiftool?
Genau. Ich will aus den Dateinamen, die vielfach, nicht immer, nach dem Schema jjjj.mm.dd_Bildunterschrift oder jjjj.mm_Bildunterschrift oder jjjj_Bildunterschrift aufgebaut sind, das Datum extrahieren und in das entsprechende exif-Feld schreiben, sowie die Bildunterschrift in IPTC.Caption. Gruß, CJC
hmmm ... das ist sehr komisch. Warum möchtest du das machen? Das Datum, das im Foto gespeichert ist, ist meiner Meinung nach das richtige. Warum möchtest du das Datum, das im Dateinamen ist, in die Metadaten schreiben?
|
caiusjuliuscaesar
(Themenstarter)
Anmeldungsdatum: 20. Januar 2009
Beiträge: 307
|
Hallo, es handelt sich um gescannte Fotos aus verschiedenen Jahrzehnten. Ich habe teilweise die Daten in den Dateinamen aufgenommen (weil ich es nicht bsser wußte, und weil es das einfachst war). Jetzt will ich das Datum in den JPG-Header schreiben. Und das möglichst automatisch bei 1000en von gescannten Fotos... Gruß, CJC
|
pinguino
Anmeldungsdatum: 6. Februar 2007
Beiträge: 732
Wohnort: BW
|
Du muß zuerst schauen, wie das Tag des Datums mit einem EXIF-Viewer heißt und anhand dessen "DateTimeOriginal" anpassen.
Außerdem würde ich eine Probe in einem Testordner machen. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #!/bin/bash
IFS='
'
for var in `find /home/user/test -name "*.jpg"`
do
var1=` echo "${var##*/}" | egrep "^[0-9][0-9][0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]_.*" | awk -F_ '{print $1}' `
exiftool -w -d %Y:%m:%d %H:%M:%S -DateTimeOriginal="$var1" "$var" > /dev/null 2>&1
var2=` echo "${var##*/}" | egrep "^[0-9][0-9][0-9][0-9]\.[0-9][0-9]_.*" | awk -F_ '{print $1}' `
exiftool -w -d %Y:%m:%d %H:%M:%S -DateTimeOriginal="$var2" "$var" > /dev/null 2>&1
var3=` echo "${var##*/}" | egrep "^[0-9][0-9][0-9][0-9]_.*" | awk -F_ '{print $1}' `
exiftool -w -d %Y:%m:%d %H:%M:%S -DateTimeOriginal="$var3" "$var" > /dev/null 2>&1
done
|
|
caiusjuliuscaesar
(Themenstarter)
Anmeldungsdatum: 20. Januar 2009
Beiträge: 307
|
Die Antwort ist ja Wahnsinn - danke. Werds ausprobieren und ggf. anpassen... Gruß, CJC
|
pinguino
Anmeldungsdatum: 6. Februar 2007
Beiträge: 732
Wohnort: BW
|
also, ich habe das mit dem Tag "DateTimeOriginal" getestet. Es ist aber notwendig, daß du auch eine Uhrzeit angibst, ansonsten kann exiftool die Daten nicht schreiben. ich habe es so getestet: 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #!/bin/bash
IFS='
'
for var in `find /home/user/testordner -maxdepth 1 -name "*.jpg"`
do
var1=` echo "${var##*/}" | awk -F_ '{print $1}' | sed 's/\./\:/g'`
exiftool -w -d %Y:%m:%d %H:%M:%S -DateTimeOriginal="${var1}[[:blank:]]10:00" "$var"
done
|
|
caiusjuliuscaesar
(Themenstarter)
Anmeldungsdatum: 20. Januar 2009
Beiträge: 307
|
Hallo,
nochmal danke.
Es wäre super, wenn Du einen Tipp geben könntest, was hier passiert: | IFS=' // ???
'
echo "${var##*/}" // ?
awk -F_ '{print $1}' // ?
sed 's/\./\:/g' // ?
exiftool ... "${var1}[[:blank:]]10:00" "$var" // ?
|
Das Skript funktioniert, allerdings habe ich Dateinamen, die nicht mit vorangestelltem Datum beginnen und trotzdem ein "-" beinhalten. Dann wirft es z. B. bei Bild_143 ein "Bild" aus. Gruß, CJC
|