• Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Mitmachen beim DSLR-Forum Fotowettbewerb Mai 2025.
    Thema: "Zweckentfremdet"

    Jeden Monat attraktive Gewinnprämien, gesponsert von unserem Partner PixelfotoExpress.
    Alle Infos zum Juni-Wettbewerb hier!
  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
WERBUNG

EXIF-Statistiken mit Linux

hier nochmal die history nur um unklarheiten vorzubeugen:
Code:
: 1320568853:0;grep 'Exposure.*' <eval/temp/imgdatap.txt |cut --delimiter=: -f2 |awk '{ split($1, a, "/"); if (a[2]==""){a[2] = 1} $1=sprintf("%8.5f",a[1]/a[2]); printf $1; printf"\n"}' >| eval/temp/d_exp.txt
: 1320568876:0;cat eval/temp/d_exp.txt|cut -f2 --delimiter=: |sort |uniq -c >|eval/exposure_stats.txt
: 1320568930:0;sort -g -r eval/exposure_stats.txt | head -1 | awk '{print $1}' >>| eval/temp/exposure_url.txt
: 1320568965:0;echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >>| eval/temp/exposure_url.txt
: 1320568982:0;sort -g -r eval/exposure_stats.txt | head -1 | awk '{print $1}' >>| eval/temp/exposure_url.txt
: 1320569029:0;awk '{print $2 , $1}' eval/exposure_stats.txt | sort -g | awk '{print $2 , $1}' >| eval/exposure_stats.txt2
: 1320569067:0;mv eval/exposure_stats.txt2 eval/exposure_stats.txt
: 1320569090:0;echo "&cht=bvs&chd=t:" >>| eval/temp/exposure_url.txt
: 1320569118:0;awk '{printf $1","}' eval/exposure_stats.txt | sed 's/\(.*\)./\1/' >>| eval/temp/exposure_url.txt
: 1320569137:0;echo "&chl=" >>| eval/temp/exposure_url.txt
: 1320569162:0;awk '{printf $2"|"'}  eval/exposure_stats.txt | sed 's/.\{1\}$//' >> eval/temp/exposure_url.txt
am letzten punkt kommt dann der fehler:
zsh: parse error near `}'
-
aber ich bin auch blöd.
klar im skript wird die bash genutzt, und ich nutze die zsh. also mal kurz in die bash gewechselt und die zeile nochmal ausgeführt:
Code:
awk '{printf $2"|"'}  eval/exposure_stats.txt | sed 's/.\{1\}$//' >> eval/temp/exposure_url.txt
-> diesmal kein fehler!
jetzt enthält die exposure_url.txt folgendes:
Code:
http://chart.apis.google.com/chart?chs=700x425&chds=0,
&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0,
&cht=bvs&chd=t:
&chl=
2
&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0,
2
&cht=bvs&chd=t:
1,1,2,2,1&chl=
-
also weiter gehts:
Code:
 wget -i eval/temp/exposure_url.txt2 -O eval/exposure_stats.png
--2011-11-06 10:00:04--  http://chart.apis.google.com/chart?chs=700x425&chds=0,&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0,&cht=bvs&chd=t:&chl=
Auflösen des Hostnamen chart.apis.google.com... 74.125.39.101, 74.125.39.113, 74.125.39.139, ...
Verbindungsaufbau zu chart.apis.google.com|74.125.39.101|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 6187 (6,0K) [image/png]
In »eval/exposure_stats.png« speichern.

100%[======================================>] 6.187       --.-K/s   in 0,004s  

2011-11-06 10:00:05 (1,31 MB/s) - »eval/exposure_stats.png« gespeichert [6187/6187]

BEENDET --2011-11-06 10:00:05--
Geholt: 1 Dateien, 6,0K in 0,004s (1,31 MB/s)

leider ist exposure_stats.png leer siehe anhang
 
Das zweite Single-Quote beim awk ist falsch. Es darf nicht awk '{printf $2"|"'} heissen, sondern awk '{printf $2"|"}'.

Das script ist in der Form wie hier gepostet offenbar nie getestet worden..
 
TEILERFOLG :-))
Hey Danke schmadde.
wenn ich jetzt nach der anpassung die zeilen einzeln nacheinander aufrufe dann funktionierts!!
siehe anhang:

-
LEIDER verstehe ich nicht, wenn ich das skript wieder als ganzes aufrufe dann ist es wie vorher (ja hab die änderungen natürlich gespeichert)
siehe skript im anhang.
 
Ein Unterschied besteht schonmal darin, dass das Script von einer bash ausgeführt wird, Deine Einzelkommandos aber von einer zsh. Wahrscheinlich liegt es aber daran, dass Du immer noch nicht die '*' und '#' escaped hast. Am besten Single Quotes drumrum .
 
das mit der bash stimmt schonmal nicht so ganz. sowohl mit zsh als auch mit der bash hab ich die einzelnen befehle durchprobiert. und es hat geklappt.
-
das zweite was du ansprichst versteh ich nicht so ganz. sehe im skript nichts weiter an * oder # was ich auskommentieren sollte
 
Das zweite Single-Quote beim awk ist falsch. Es darf nicht awk '{printf $2"|"'} heissen, sondern awk '{printf $2"|"}'.

Das script ist in der Form wie hier gepostet offenbar nie getestet worden..
Doch. Die bei mir ausgegebenen Grafiken kann man sich auch anschauen. Ich hatte damals aber kaum Ahnung von Bash (was heute aber auch nur ETWAS besser ist, das sinnlose cat z.B. würde ich auch nicht mehr machen).

Zum Fehler: Lösche mal im ersten cat-Block jedes Vorkommen von ".*:" raus. (Also das da dann z.B. grep Exposure statt grep Exposure.*: steht)

Ansonsten: Jede Zeile, die nicht mit "echo" beginnt und in der ">> eval/temp/<IRGENDWAS>.txt" am Ende steht. sollte auch etwas in diese Datei reinschreiben. Ob sie das tut, kannst du z.B. ganz einfach mit einem "echo test1 >> eval/temp/<IRGENDWAS>.txt" rausfinden, wobei du test1 natürlich benennen kannst wie du willst (ohne Leerzeichen, sonst musst du noch Anführungszeichen drum machen). Damit siehst du, ob überhaupt etwas reingeschrieben wurde.
 
Ich hab' das Script nochmal ein wenig überarbeitet, schau mal, ob es jetzt funktioniert:
Code:
#!/bin/bash
#EXIF statistics script by causa-prima 2010-2011
#original script by spoilerhead 2009-2010
BEGIN=$(date +%s)
rm eval/temp/imgdatap.txt
mkdir eval
mkdir eval/temp
COUNT=1
N=$(find . -iname '*.CR2' | wc -l)
find . -iname '*.CR2' |sort | while read FILE
do
    echo -ne "reading EXIF-data from file $COUNT of $N..\r"
    COUNT=$(($COUNT+1))
    LANGUAGE=C exiftool -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -FocusMode -MeteringMode -FocusMode -ShootingMode -Orientation "$FILE" >>eval/temp/imgdatap.txt &
    
    
    #process in batches
    NPROC=$(($NPROC+1))
	    if [ "$NPROC" -ge 8 ]; then
	        wait
	        NPROC=0
    fi
done
#wait for all processes to finish
wait

grep 'Exposure.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 |awk '{ split($1, a, "/"); if (a[2]==""){a[2] = 1} $1=sprintf("%8.5f",a[1]/a[2]); printf $1; printf"\n"}' > eval/temp/d_exp.txt
#replace infinity aperture with 64 (unknown)
grep 'Aperture.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 |sed 's/inf/64/g' > eval/temp/d_apr.txt
grep 'Focal.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_focal.txt 
grep 'ISO.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_iso.txt
grep 'Lens.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_lens.txt
grep 'Flash.*:' < eval/temp/imgdatap.txt  |cut --delimiter=: -f2 > eval/temp/d_flash.txt
grep 'Focus.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_focus.txt
grep 'Metering.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_meter.txt
grep 'Focus.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_af.txt
grep 'Shooting.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_shoot.txt
grep 'Orientation.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_orientation.txt

echo
echo evaluating ...
sort eval/temp/d_exp.txt | uniq -c | sort -g -r >eval/exposure_stats.txt
sort eval/temp/d_apr.txt | uniq -c | sort -g -r >eval/apr_stats.txt
sort eval/temp/d_focal.txt | uniq -c | sed 's/.\{5\}$//' | sort -g -r >eval/focal_stats.txt
sort eval/temp/d_iso.txt | uniq -c | sort -g -r >eval/iso_stats.txt
sort eval/temp/d_lens.txt | uniq -c | sort -g -r >eval/lens_stats.txt
sort eval/temp/d_flash.txt | uniq -c | sort -g -r >eval/flash_stats.txt
sort eval/temp/d_focus.txt | uniq -c | sort -g -r >eval/focus_stats.txt
sort eval/temp/d_meter.txt | uniq -c | sort -g -r >eval/lens_meter.txt
sort eval/temp/d_af.txt | uniq -c | sort -g -r >eval/af_stats.txt
sort eval/temp/d_shoot.txt | uniq -c | sort -g -r >eval/shoot_stats.txt
sort eval/temp/d_orientation.txt | uniq -c | sort -g -r >eval/orientation_stats.txt


echo "plotting..."
# write first part of url to all files
echo "http://chart.apis.google.com/chart?chs=700x425&chds=0," |tee eval/temp/exposure_url.txt | tee eval/temp/apr_url.txt | tee eval/temp/focal_url.txt | tee eval/temp/iso_url.txt | tee eval/temp/lens_url.txt | tee eval/temp/flash_url.txt | tee eval/temp/focus_url.txt | tee eval/temp/lens_meter_url.txt | tee eval/temp/af_url.txt | tee eval/temp/shoot_url.txt > eval/temp/orientation_url.txt


#exposure
head -1 < eval/exposure_stats.txt | awk '{print $1}' >> eval/temp/exposure_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> eval/temp/exposure_url.txt
sort -g -r eval/exposure_stats.txt | head -1 | awk '{print $1}' >> eval/temp/exposure_url.txt
echo
awk '{print $2 , $1}' eval/exposure_stats.txt | sort -g | awk '{print $2 , $1}' > eval/exposure_stats.txt2
mv eval/exposure_stats.txt2 eval/exposure_stats.txt
echo "&cht=bvs&chd=t:" >> eval/temp/exposure_url.txt
awk '{printf $1","}' eval/exposure_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/exposure_url.txt
echo "&chl=" >> eval/temp/exposure_url.txt
awk '{printf $2"|"}'  eval/exposure_stats.txt | sed 's/.\{1\}$//' >> eval/temp/exposure_url.txt
awk '{printf $1}' eval/temp/exposure_url.txt > eval/temp/exposure_url.txt2
wget -i eval/temp/exposure_url.txt2 -O eval/exposure_stats.png > /dev/null 2>&1 

#apr
head -1 < eval/apr_stats.txt | awk '{print $1}' >> eval/temp/apr_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> eval/temp/apr_url.txt
sort -g -r eval/apr_stats.txt | head -1 | awk '{print $1}' >> eval/temp/apr_url.txt
awk '{print $2 , $1}' eval/apr_stats.txt | sort -g | awk '{print $2 , $1}' > eval/apr_stats.txt2
mv eval/apr_stats.txt2 eval/apr_stats.txt
echo "&cht=bvs&chd=t:" >> eval/temp/apr_url.txt
awk '{printf $1","}' eval/apr_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/apr_url.txt
echo "&chl=" >> eval/temp/apr_url.txt
awk '{printf $2"|"}' eval/apr_stats.txt | sed 's/.\{1\}$//' >> eval/temp/apr_url.txt
awk '{printf $1}' eval/temp/apr_url.txt > eval/temp/apr_url.txt2
wget -i eval/temp/apr_url.txt2 -O eval/apr_stats.png > /dev/null 2>&1 

#focal
head -1 eval/focal_stats.txt | awk '{print $1}' >> eval/temp/focal_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> eval/temp/focal_url.txt
sort -g -r eval/focal_stats.txt | head -1 | awk '{print $1}' >> eval/temp/focal_url.txt
awk '{print $2 , $1}' eval/focal_stats.txt | sort -g | awk '{print $2 , $1}' > eval/focal_stats.txt2
mv eval/focal_stats.txt2 eval/focal_stats.txt
echo "&cht=bvs&chd=t:" >> eval/temp/focal_url.txt
awk '{printf $1","}' eval/focal_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/focal_url.txt
echo "&chl=" >> eval/temp/focal_url.txt
awk '{printf $2"|"}' eval/focal_stats.txt | sed 's/.\{1\}$//' >> eval/temp/focal_url.txt
awk '{printf $1}' eval/temp/focal_url.txt > eval/temp/focal_url.txt2
wget -i eval/temp/focal_url.txt2 -O eval/focal_stats.png > /dev/null 2>&1 

#iso
head -1 < eval/iso_stats.txt | awk '{print $1}' >> eval/temp/iso_url.txt
echo "&cht=p&chd=t:" >> eval/temp/iso_url.txt
awk '{printf $1","}' eval/iso_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/iso_url.txt
echo "&chl=" >> eval/temp/iso_url.txt
awk '{printf $2"|"}'  eval/iso_stats.txt | sed 's/.\{1\}$//' >> eval/temp/iso_url.txt
awk '{printf $1}' eval/temp/iso_url.txt > eval/temp/iso_url.txt2
wget -i eval/temp/iso_url.txt2 -O eval/iso_stats.png > /dev/null 2>&1 

#lens
head -1 < eval/lens_stats.txt | awk '{print $1}' >> eval/temp/lens_url.txt
echo "&cht=p&chd=t:" >> eval/temp/lens_url.txt
awk '{printf $1","}' eval/lens_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/lens_url.txt
echo "&chl=" >> eval/temp/lens_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/lens_stats.txt | sed 's/.\{2\}$//' >> eval/temp/lens_url.txt
awk '{printf $1}' eval/temp/lens_url.txt > eval/temp/lens_url.txt2
wget -i eval/temp/lens_url.txt2 -O eval/lens_stats.png > /dev/null 2>&1 

#flash
head -1 < eval/flash_stats.txt | awk '{print $1}' >> eval/temp/flash_url.txt
echo "&cht=p&chd=t:" >> eval/temp/flash_url.txt
awk '{printf $1","}' eval/flash_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/flash_url.txt
echo "&chl=" >> eval/temp/flash_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/flash_stats.txt | sed 's/.\{2\}$//' >> eval/temp/flash_url.txt
awk '{printf $1}' eval/temp/flash_url.txt > eval/temp/flash_url.txt2
wget -i eval/temp/flash_url.txt2 -O eval/flash_stats.png > /dev/null 2>&1 

#focus
head -1 < eval/focus_stats.txt | awk '{print $1}' >> eval/temp/focus_url.txt
echo "&cht=p&chd=t:" >> eval/temp/focus_url.txt
awk '{printf $1","}' eval/focus_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/focus_url.txt
echo "&chl=" >> eval/temp/focus_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/focus_stats.txt | sed 's/.\{2\}$//' >> eval/temp/focus_url.txt
awk '{printf $1}' eval/temp/focus_url.txt > eval/temp/focus_url.txt2
wget -i eval/temp/focus_url.txt2 -O eval/focus_stats.png > /dev/null 2>&1 

#lens_meter
head -1 < eval/lens_meter.txt | awk '{print $1}' >> eval/temp/lens_meter_url.txt
echo "&cht=p&chd=t:" >> eval/temp/lens_meter_url.txt
awk '{printf $1","}' eval/lens_meter.txt | sed 's/\(.*\)./\1/' >> eval/temp/lens_meter_url.txt
echo "&chl=" >> eval/temp/lens_meter_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/lens_meter.txt | sed 's/.\{2\}$//' >> eval/temp/lens_meter_url.txt
awk '{printf $1}' eval/temp/lens_meter_url.txt > eval/temp/lens_meter_url.txt2
wget -i eval/temp/lens_meter_url.txt2 -O eval/lens_meter.png > /dev/null 2>&1 

#af
head -1 < eval/af_stats.txt | awk '{print $1}' >> eval/temp/af_url.txt
echo "&cht=p&chd=t:" >> eval/temp/af_url.txt
awk '{printf $1","}' eval/af_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/af_url.txt
echo "&chl=" >> eval/temp/af_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/af_stats.txt | sed 's/.\{2\}$//' >> eval/temp/af_url.txt
awk '{printf $1}' eval/temp/af_url.txt > eval/temp/af_url.txt2
wget -i eval/temp/af_url.txt2 -O eval/af_stats.png > /dev/null 2>&1 

#shoot
head -1 < eval/shoot_stats.txt | awk '{print $1}' >> eval/temp/shoot_url.txt
echo "&cht=p&chd=t:" >> eval/temp/shoot_url.txt
awk '{printf $1","}' eval/shoot_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/shoot_url.txt
echo "&chl=" >> eval/temp/shoot_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/shoot_stats.txt | sed 's/.\{2\}$//' >> eval/temp/shoot_url.txt
awk '{printf $1}' eval/temp/shoot_url.txt > eval/temp/shoot_url.txt2
wget -i eval/temp/shoot_url.txt2 -O eval/shoot_stats.png > /dev/null 2>&1 

#orientation
head -1 < eval/orientation_stats.txt | awk '{print $1}' >> eval/temp/orientation_url.txt
echo "&cht=p&chd=t:" >> eval/temp/orientation_url.txt
awk '{printf $1","}' eval/orientation_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/orientation_url.txt
echo "&chl=" >> eval/temp/orientation_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/orientation_stats.txt | sed 's/.\{2\}$//' >> eval/temp/orientation_url.txt
awk '{printf $1}' eval/temp/orientation_url.txt > eval/temp/orientation_url.txt2
wget -i eval/temp/orientation_url.txt2 -O eval/orientation_stats.png > /dev/null 2>&1 

#cleaning
rm -r eval/temp

echo done!
NOW=$(date +%s)
DIFF=$(($NOW - $BEGIN))
MINS=$(($DIFF / 60))
SECS=$(($DIFF % 60))
echo "Time elapsed: $MINS:`printf %02d $SECS`"

Es gäbe noch ein paar Stellen, die man optimieren könnte (z.B. sort-Aufrufe, "echo" durch "echo -n" beim URL-bauen ersetzten, um sich die zweite txt zu sparen, ..), aber dazu hab' ich grad keine Lust mehr. Es kommt aber schonmal kein cat mehr vor.
 
ok Vielen Dank an alle Beteiligten.
Die Aufräumaktionen haben dem Skript sicherlich nur gut getan.
Es funktioniert jetzt auch bei mir sehr gut. Auch in Ordnern mit vielen Dateien.
Setlsamerweise sind in dem Ordner den ich für die ersten Tests herangezogen hab nur 7 JPG s aber in diesem Ordner funktioniert keins der Skripte. Obwohl wie gesagt wenn ich diese manuell durchgehe die Exif-Dateien und die Grafiken trotzdem erstellt werden.
 
Moin,

hab die neue Version mal über mein Archiv laufen lassen:

collecting picture files ...
reading EXIF-data from file 41056 of 41056..
evaluating ...
plotting...

done!
Time elapsed: 104:59

Es kommen auch ein paar schöne Grafiken raus, die aber bei dieser Bildermenge ab und zu recht unübersichtlich werden (z.B. lens-stats). Aufschlussreich sind die Statistiken aber allemal. Werd da mal einen cronjob anlegen, der die wöchentlich aktualisiert. Dazu eine Webseite zur Darstellung und man hat ein cooles Reporting :)

Wenn die Scriptschreiber nix dagegen haben, würde ich die neue Version gerne wieder auf meinen Server packen und zum leichteren Download anbieten. Sollte dann aber unter der GPL lizensiert sein ...

Gruss, Klaus
 
Meinetwegen ist das kein Problem, aber von mir stammt ja nicht alles. Vor allem nicht die Idee :)

Prima - sollte jemand anders noch Einspruch erheben, dann kann ich es ja immer noch löschen. Hier ist's ja schon veröffentlicht.

Beim Umbau hab ich noch einen Fehler bemerkt. Die Werte für "Focus.*" werden doppelt ausgewertet und sind in den Statistiken damit doppelt so hoch:

Code:
...
grep 'Flash.*:' < eval/temp/imgdatap.txt  |cut --delimiter=: -f2 > eval/temp/d_flash.txt
[B]grep 'Focus.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_focus.txt[/B]
grep 'Metering.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_meter.txt
[B]grep 'Focus.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_af.txt[/B]
...

Die letzten Tage hab ich das Ganze noch wesentlich ausgebaut und auf meine Bedürfnisse abgestimmt. Es wird eine "index.html" mit den Grafiken gebaut, es gibt einen Option-Handler mit verschiedenen Versionen und vor allem können die Diagramme alternativ auch mit gnuplot anstelle der Google-API erstellt werden. Leider sind PieCharts mit gnuplot nicht ohne weiteres möglich, deshalb hab ich mich mal auf Histogramme beschränkt. Wenn da jemand mal Zeit und Lust hat ... ;)

Allerdings ist die Piechart-Darstellung bei grossen Bildarchiven (41000 Bilder in meinem Beispiel) in manchen Fällen sowieso nicht mehr lesbar, weil einfach zu viele Werte vorhanden sind (z.B. Aperture, Focus Length).

Einen Download des Scripts gibt's hier:
pictstatistics.sh Version 1.5

Hier auch noch der Quelltext für reine Forumsuser:

Code:
#!/bin/bash
#EXIF statistics script by causa-prima 2010
#original script by spoilerhead 2009-2010

# $Id: pictstatistics.sh,v 1.5 2011/11/13 09:57:55 ks Exp ks $

# cleanup and abort on signals
trap 'echo "CANCELED"; rm -rf "${STATDIR}/temp"; exit 1' 1 2 3 15

BEGIN=$(date +%s)

### Parameters (default values)

# 0=debug,1=info,2=error,3=critical
VERBOSELEVEL=1

# directory for storing the statistical data
STATDIR="./pictstat"

# default file extension for picture data
FILEEXT=".CR2"

# filename for html index
INDEXFILE=${STATDIR}/index.html

# exposure times in decimal (d) or fraction (f) format
EXPTIMEFMT="f"

# which tool is used to draw the graphs: "gnuplot" or "google"
DRAWTOOL="gnuplot"

# dimensions of graph (only gnuplot)
GRAPHHEIGHT=600
GRAPHWIDTH=1400

# draw only new graphs from available data (0) or collect new picture data
COLLECTDATA=1

# html titles and xaxis label (only gnuplot) for the picture files
TITLE[0]="af_stats:Autofocus Mode" 
TITLE[1]="apr_stats:Aperture Values" 
TITLE[2]="exposure_stats:Exposure Values" 
TITLE[3]="flash_stats:Flash Used" 
TITLE[4]="focal_stats:Focal Length" 
TITLE[5]="iso_stats:Iso Values" 
TITLE[6]="lens_meter:Exposure Mode" 
TITLE[7]="lens_stats:Lens Used" 
TITLE[8]="orientation_stats:Orientation" 
TITLE[9]="shoot_stats:Metering Mode" 

# number of parallel exiftool processes to evaluate picture data
MAXPROC=8


# functions ------------------------------------------------------------------------
# output for messages depending on verbosity
# $1 severity, $2 message
# `-> 0=debug,1=info,2=error,3=critical
function msg()
{
        if [ $1 -ge $VERBOSELEVEL ]; then
                if [ $1 -ge 2 ]; then
                        # use stderr for printing the message
                        echo >&2 -e "$2"
                else
                        # use stdout for printing the message
                        echo -e "$2"
                fi
        fi

        if [ $1 -ge 3 ]; then
                exit 3
        fi
}

# print usage information
function printhelp () {
        echo "usage: $0 [-h] [-d <DEBUGLEVEL>] [-e <EXTENSION>] [-f] [-g] [-p] [-n] [-P <MAXPROC>] " 
        echo "-h        this help message" 
        echo "-d <n>        set debug level: 0=debug,1=info,2=error,3=critical"
        echo "-e <.ext> extension for picture files (ie. \".CR2\" or \".jpg\"), not case sensitive, default is $FILEEXT"
        echo "-f        print exposure time in fraction instead of decimal format"
        echo "-g        draw graph pictures with google chart tool"
        echo "-p        draw graph pictures with gnuplot"
        echo "-g and -p are mutual exclusive, latest found option is used, default is $DRAWTOOL"
        echo "-n                no data gathering, use available .txt files to draw new graphs"
        echo "-P <n>    number of parallel processes for gathering picture data, default is $MAXPROC"
        echo -e "\n"
}

# make an empty html file
# $1 file
function htmlclear()
{
        msg 0 "Creating HTML file for $1."
        echo -n > "$1" || msg 3 "Error creating HTML file. Stop."
}

# print a string to an html-file
# $1 string, $2 file
function htmlprint()
{
        echo -e -n $1 >> "$2" || msg 3 "Error writing HTML file. Stop."
}

# setup html header
# $1 title, $2 file
function htmlheader()
{
        msg 0 "Writing HTML header for $2."
        htmlprint "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n" "$2"
        htmlprint "<html>\n" "$2"
        htmlprint "<head>\n" "$2"
        htmlprint "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n" "$2"
        htmlprint "<title>$1</title>\n" "$2"
        htmlprint "</head>\n" "$2"
        htmlprint "<body style=\"text-align: center;\">\n" "$2"
}

# write out html footer
# $1 file
function htmlfooter()
{
        msg 0 "Writing HTML footer for $1."
        htmlprint "<br />\n" "$1"

        htmlprint "</body>\n" "$1"
        htmlprint "</html>\n" "$1"
}

# $1 name of tool
function toolcheck()
{
        X=`type -p $1`
        if test $X && test -x $X;
                then return 0
                else return 1
        fi
}

# draw graph wit gnuplot
# $1 = filename without extention
# $2 = labels of xaxis
function drawgraph_gnuplot
{
        GNUTERM="unknown" GDFONTPATH="/usr/share/fonts/corefonts" $GNUPLOT <<EOF
        reset
        clear
        set encoding locale
        set style data histograms
        set style fill solid 2 border -1
        set boxwidth 2 relative
        set autoscale
        set ylabel "# pictures" font "arial,10"
        set grid y front
        set xlabel "$2" font "arial,10"
        # set title "$2" font "arial,14"

        # for testing
        # set term x11 size ${GRAPHWIDTH},${GRAPHHEIGHT}

        # where can gnuplot find the arial.ttf
        # export GDFONTPATH="/usr/share/fonts/corefonts"

        # output as PNG graph
        set term png size ${GRAPHWIDTH},${GRAPHHEIGHT} font "arial,8"
        set output '$1.png'
        # to display the generated graph on the screen
        # set output '| display png:-'
        set xtics nomirror rotate by -90 out
        plot "$1.qtxt" using 1:xticlabels(2) notitle

        # output as SVG graph
        set term svg size ${GRAPHWIDTH},${GRAPHHEIGHT} font "Arial,8"
        set output '$1.svg'
        # to display the generated graph on the screen
        # set output '| display svg:-'
        set xtics nomirror rotate by -90 out offset 0-1.2,graph 0
        plot "$1.qtxt" using 1:xticlabels(2) notitle
EOF
}

# draw pie chart with google chart api
# $1 filename without extention for date-file (.txt) and picture-file (.png)
# $2 filename for url without extention
function drawpie_google
{
        cat ${STATDIR}/$1.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/$2.txt
        echo "&cht=p&chd=t:" >> ${STATDIR}/temp/$2.txt
        awk '{printf $1","}' ${STATDIR}/$1.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/$2.txt
        echo "&chl=" >> ${STATDIR}/temp/$2.txt
        awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/$1.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/$2.txt
        # awk '{printf $2"|"'}  ${STATDIR}/$1.txt | sed 's/.\{1\}$//' >> ${STATDIR}/temp/$2.txt
        awk '{printf $1}' ${STATDIR}/temp/$2.txt > ${STATDIR}/temp/$2.txt2
        wget -i ${STATDIR}/temp/$2.txt2 -O ${STATDIR}/$1.png > /dev/null 2>&1 
}

# draw histogramm with google chart api
# $1 filename without extention for date-file (.txt) and picture-file (.png)
# $2 filename for url without extention
function drawhist_google
{
        sort -g -r ${STATDIR}/$1.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/$2.txt
        echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> ${STATDIR}/temp/$2.txt
        sort -g -r ${STATDIR}/$1.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/$2.txt
        awk '{print $2 , $1}' ${STATDIR}/$1.txt | sort -g | awk '{print $2 , $1}' > ${STATDIR}/$1.txt2
        mv ${STATDIR}/$1.txt2 ${STATDIR}/$1.txt
        echo "&cht=bvs&chd=t:" >> ${STATDIR}/temp/$2.txt
        awk '{printf $1","}' ${STATDIR}/$1.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/$2.txt
        echo "&chl=" >> ${STATDIR}/temp/$2.txt
        awk '{printf $2"|"'}  ${STATDIR}/$1.txt | sed 's/.\{1\}$//' >> ${STATDIR}/temp/$2.txt
        awk '{printf $1}' ${STATDIR}/temp/$2.txt > ${STATDIR}/temp/$2.txt2
        wget -i ${STATDIR}/temp/$2.txt2 -O ${STATDIR}/$1.png > /dev/null 2>&1 
}

# option handler ----------------
ABORT=0
while getopts  "hd:e:fgpnP:" MYOPTION
do
    # echo "$MYOPTION" $OPTIND $OPTARG

    if [ "$MYOPTION" = "h" -o "$MYOPTION" = "?" ]; then
        # print usage
        ABORT=1
    fi

    if [ "$MYOPTION" = "d" ]; then
        # set debug level
        if [ $OPTARG -ge 0 -a $OPTARG -le 9 ]; then
            VERBOSELEVEL=$OPTARG
            msg 0 "set verbosity to $VERBOSELEVEL"
        else
            msg 2 "$OPTARG not valid for debug level - please provide a value between 0 and 9\n"
            ABORT=1
        fi
    fi

        if [ "$MYOPTION" = "e" ]; then
                # extention for picture files
                FILEEXT=$OPTARG
                msg 1 "search for files with extention $FILEEXT"

                if [ "${FILEEXT:0:1}" != "." ]; then
                        msg 3 "Extention has to start with \".\""
                fi
                echo $FILEEXT | grep "[[:space:]]" &>/dev/null && msg 3 "only one extention allowed"
        fi

        if [ "$MYOPTION" = "f" ]; then
                # exposure times in fraction format
                EXPTIMEFMT=f
                msg 1 "exposure times in fraction format"
        fi

        if [ "$MYOPTION" = "g" ]; then
                # draw graphs with google chart tool
                DRAWTOOL="google"
                msg 1 "use google chart tool for drawing the graphics"
        fi

        if [ "$MYOPTION" = "p" ]; then
                # draw graphs with gnuplot tool
                DRAWTOOL="gnuplot"
                msg 1 "use gnuplot for drawing the graphics"
        fi

        if [ "$MYOPTION" = "n" ]; then
                # don't evaluate the pictrues, draw graphs with available data
                COLLECTDATA=0
                msg 1 "don't collect new data and draw new graphs with the available .txt files"
        fi

        if [ "$MYOPTION" = "P" ]; then
                # number of parallel processes for gathering picture data
                MAXPROC=$OPTARG
                msg 1 "set number of parallel processes to $MAXPROC"

                if [ $MAXPROC -lt 1 -o $MAXPROC -gt 99 ]; then
                        msg 3 "unvalid value for parallel processes, use 1 to 99"
                fi
        fi

done    # option handling

if [ $ABORT -eq 1 ]; then
    # option not valid - abort script
    printhelp
    exit 1
fi

# Tools needed
# specify full path when not in $PATH
EXIFTOOL="exiftool"
GNUPLOT="gnuplot"

# All tools available ?
toolcheck $EXIFTOOL || msg 3 "exiftool not found."
if [ "$DRAWTOOL" == "gnuplot" ]; then
        toolcheck $GNUPLOT || msg 3 "gnuplot not found."
fi

# main -----------------------------------------------------------------------------------
NOPICT=0        # number of picture files found

if [ $COLLECTDATA -eq 1 ]; then
        # evaluate all pictures and create new data files
        msg 1 "collecting picture data ..."

        # delete old image data create necessary directories
        [ -e ${STATDIR}/temp/imgdatap.txt ] && rm ${STATDIR}/temp/imgdatap.txt
        [ -d ${STATDIR} ] || mkdir ${STATDIR}
        [ -d ${STATDIR}/temp ] || mkdir ${STATDIR}/temp

        [ -d ${STATDIR} ] || msg 3 "directory ${STATDIR} doesn\'t exist - exiting"

        COUNT=1
        NOPICT=$(find . -iname "*${FILEEXT}" | wc -l)

        [ $NOPICT -eq 0 ] && msg 3 "no matching files with extention $FILEEXT found - exiting"

        find . -iname "*${FILEEXT}" | sort | while read FILE
        do
                echo -ne "reading EXIF-data from file $COUNT of $NOPICT ..\r"
                COUNT=$(($COUNT+1))
                echo "$FILE" >>${STATDIR}/temp/imgdatap.txt
                LANGUAGE=C $EXIFTOOL -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -MeteringMode -FocusMode -ShootingMode -Orientation "$FILE" >>${STATDIR}/temp/imgdatap.txt &

                #process in batches
                NPROC=$(($NPROC+1))
                        if [ "$NPROC" -ge ${MAXPROC} ]; then
                                wait
                                NPROC=0
                fi
        done
        #wait for all processes to finish
        wait

        # save number of evaluated picture files
        echo ${NOPICT} > ${STATDIR}/no_of_pict.txt

        msg 1 "evaluating ..."
        if [ "$EXPTIMEFMT" == "f" ]; then
                # exposure time as fraction
                grep "Exposure.*:" ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_exp.txt
        else
                # exposure times in decimal
                grep "Exposure.*:" ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 | awk '{ split($1, a, "/"); if (a[2]==""){a[2] = 1} $1=sprintf("%8.5f",a[1]/a[2]); printf $1; printf"\n"}' > ${STATDIR}/temp/d_exp.txt
        fi

        #replace infinity aperture with 999 (unknown)
        grep "Aperture.*:"              ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 | sed s#inf#999#g > ${STATDIR}/temp/d_apr.txt
        grep "Focal.*:"                 ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_focal.txt 
        grep "ISO.*:"                   ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_iso.txt
        grep "Lens.*:"                  ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_lens.txt
        grep "Flash.*:"                 ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_flash.txt
        grep "Metering.*:"              ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_meter.txt
        grep "Shooting.*:"              ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_shoot.txt
        grep "Orientation.*:"   ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_orientation.txt
        grep "Focus.*:"                 ${STATDIR}/temp/imgdatap.txt | cut --delimiter=: -f2 > ${STATDIR}/temp/d_af.txt

        cut ${STATDIR}/temp/d_exp.txt                   -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/exposure_stats.txt 
        cut ${STATDIR}/temp/d_apr.txt                   -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/apr_stats.txt
        cut ${STATDIR}/temp/d_focal.txt                 -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/focal_stats.txt
        cut ${STATDIR}/temp/d_iso.txt                   -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/iso_stats.txt
        cut ${STATDIR}/temp/d_lens.txt                  -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/lens_stats.txt
        cut ${STATDIR}/temp/d_flash.txt                 -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/flash_stats.txt
        cut ${STATDIR}/temp/d_meter.txt                 -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/lens_meter.txt
        cut ${STATDIR}/temp/d_shoot.txt                 -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/shoot_stats.txt
        cut ${STATDIR}/temp/d_orientation.txt   -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/orientation_stats.txt
        cut ${STATDIR}/temp/d_af.txt                    -f2 --delimiter=: | sort | uniq -c | sort -g -r > ${STATDIR}/af_stats.txt
fi      # evaluate the picture files and create new data files ? 

# directory with statistic data available ?
[ -d ${STATDIR} ] || msg 3 "directory $STATDIR does not exists, no statistical data available - exiting"
[ -d ${STATDIR}/temp ] || mkdir ${STATDIR}/temp

# draw some nice graphs ...

if [ "$DRAWTOOL" == "google" ]; then
        msg 1 "plotting with google charts ..."
        # write first part of url to all files
        echo "http://chart.apis.google.com/chart?chs=700x425&chds=0," | tee ${STATDIR}/temp/exposure_url.txt | tee ${STATDIR}/temp/apr_url.txt | tee ${STATDIR}/temp/focal_url.txt | tee ${STATDIR}/temp/iso_url.txt | tee ${STATDIR}/temp/lens_url.txt | tee ${STATDIR}/temp/flash_url.txt | tee ${STATDIR}/temp/focus_url.txt | tee ${STATDIR}/temp/lens_meter_url.txt | tee ${STATDIR}/temp/af_url.txt | tee ${STATDIR}/temp/shoot_url.txt > ${STATDIR}/temp/orientation_url.txt

        #exposure
        drawhist_google "exposure_stats" "exposure_url"
        #apr
        drawhist_google "apr_stats" "apr_url"
        #focal
        drawhist_google "focal_stats" "focal_url"
        #iso
        drawpie_google "iso_stats" "iso_url"
        #lens
        drawpie_google "lens_stats" "lens_url"
        #flash
        drawpie_google "flash_stats" "flash_url"
        #focus
        drawpie_google "focus_stats" "focus_url"
        #lens_meter
        drawpie_google "lens_meter" "lens_meter_url"
        #af
        drawpie_google "af_stats" "af_url"
        #shoot
        drawpie_google "shoot_stats" "shoot_url"
        #orientation
        drawpie_google "orientation_stats" "orientation_url"

elif [ "$DRAWTOOL" == "gnuplot" ]; then
        msg 1 "plotting with gnuplot ..."

        i=0
        while [ "${TITLE[$i]}" != "" ]; do

                GRAPHTITLE=${TITLE[$i]##*:}
                FILE=${TITLE[$i]%%:*}

                msg 0 ">>>> $FILE: $GRAPHTITLE"

                # quote label fields
                cat "${STATDIR}/${FILE}.txt" | awk ' { xlabel=""; printf $1 "\t""\""; for (i=2;i<=NF;i++){ xlabel=xlabel$i" ";} print substr(xlabel,1,35) " [" $1 "]\"" }' > "${STATDIR}/temp/${FILE}.txt"
                mv "${STATDIR}/temp/${FILE}.txt" "${STATDIR}/${FILE}.qtxt"

                # draw graphs
                drawgraph_gnuplot "${STATDIR}/${FILE}" "${GRAPHTITLE}"

                i=$(($i+1))
        done
else
        msg 3 "implemented drawing tools are \"gnuplot (-p)\" or \"google (-g)\", found \"${DRAWTOOL}\" and do not know what to do with it, exiting"
fi

# making html index file
WDIR="$(pwd)"
[ $NOPICT -eq 0 ] && [ -r "${STATDIR}/no_of_pict.txt" ] && NOPICT=$(cat "${STATDIR}/no_of_pict.txt")

htmlclear "${INDEXFILE}"
htmlheader "Picture Statistics" "${INDEXFILE}"

htmlprint "<h1>Picture Statistics of ${WDIR}</h1>\n" "${INDEXFILE}"
htmlprint "<h3>out of ${NOPICT} raw files</h3>\n<BR>\n" "${INDEXFILE}"

i=0
while [ "${TITLE[$i]}" != "" ]; do

        HEADER=${TITLE[$i]##*:}
        FILE=${TITLE[$i]%%:*}

        EXT="png"       # default: use png extention

        if [ "$DRAWTOOL" == "gnuplot" ]; then
                # use svg graphs when created with gnuplot
                EXT="svg"
        fi

        htmlprint "<h2>${HEADER}</h2>\n" "${INDEXFILE}"
        htmlprint "<img src=\"${FILE}.${EXT}\" alt=\"${FILE}.${EXT}\"\n<BR>\n" "${INDEXFILE}"

        i=$(($i+1))
done

# do the dishes
rm -r ${STATDIR}/temp

msg 1 "done!"

NOW=$(date +%s)
DIFF=$(($NOW - $BEGIN))
MINS=$(($DIFF / 60))
SECS=$(($DIFF % 60))
echo "Time elapsed: $MINS:`printf %02d $SECS`"
 
Erstmal vielen Dank für die Mühe, die ihr euch mit dem Script macht. :top::top:

Prima - sollte jemand anders noch Einspruch erheben, dann kann ich es ja immer noch löschen.

Ganz so einfach ist das im Allgemeinen nicht; eine Veröffentlichung heißt nicht, dass plötzlich jeder anderswo auch veröffentlichen darf. Aber egal, man muss ja nicht überall einen Abmahnanwalt vermuten ;)

Gruß
Hafer
 
Erstmal vielen Dank für die Mühe, die ihr euch mit dem Script macht. :top::top:

naja - so ganz uneigennützig ist's ja nicht ;)

Ganz so einfach ist das im Allgemeinen nicht; eine Veröffentlichung heißt nicht, dass plötzlich jeder anderswo auch veröffentlichen darf. Aber egal, man muss ja nicht überall einen Abmahnanwalt vermuten ;)

Stimmt schon - aber ich glaube einfach an das Gute im DSLR-Forumsmitglied. Ausserdem ist der "fremd" erbrachte Anteil am Script ja inzwischen doch ganz erheblich. Mein Anteil ist auf jeden Fall OS unter GPL !


Gruss, Klaus

PS: für Rückmeldungen und Verbesserungsvorschläge (ohne Gewähr auf Umsetzung) bin ich immer zu haben ...
 
Meinetwegen ist das kein Problem, aber von mir stammt ja nicht alles. Vor allem nicht die Idee :)

Hab vorsichtshalber den Thread nochmal durchgeschaut und in #48 folgendes Zitat vom "Ideengeber" gefunden:

Lange nicht geantwortet ;)

Lizenz?
Was ist das?
Braucht die Menschheit sowas?


Nö, macht damit was ihr wollt, solangs besser wird und ich auch was davon hab :lol:

lg
Michael

Sollte also alles im grünen Bereich sein.

Vielen Dank an alle Vordenker
Klaus
 
Moin zusammen,

hab gerade noch die Version 1.8 mit ein paar eher kosmetischen Änderungen hochgeladen:

Code:
===================================================================
RCS file: /local/bin/RCS/pictstatistics.sh,v
retrieving revision 1.5
diff -r1.5 /local/bin/pictstatistics.sh
1a2
> #extentions by wiesenbiber 2011
5c6
< # $Id: pictstatistics.sh,v 1.5 2011/11/13 09:57:55 ks Exp $
---
> # $Id: pictstatistics.sh,v 1.8 2011/11/14 09:31:22 ks Exp ks $
323c324
<               echo -ne "reading EXIF-data from file $COUNT of $NOPICT ..\r"
---
>               [ $VERBOSELEVEL -lt 2 ] && echo -ne "reading EXIF-data from file $COUNT of $NOPICT ..\r"
325,326c326
<               echo "$FILE" >>${STATDIR}/temp/imgdatap.txt
<               LANGUAGE=C $EXIFTOOL -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -MeteringMode -FocusMode -ShootingMode -Orientation "$FILE" >>${STATDIR}/temp/imgdatap.txt &
---
>               LANGUAGE=C $EXIFTOOL -FileName -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -MeteringMode -FocusMode -ShootingMode -Orientation "$FILE" >>${STATDIR}/temp/imgdatap.txt &
419,420c419
<               cat "${STATDIR}/${FILE}.txt" | awk ' { xlabel=""; printf $1 "\t""\""; for (i=2;i<=NF;i++){ xlabel=xlabel$i" ";} print substr(xlabel,1,35) " [" $1 "]\"" }' > "${STATDIR}/temp/${FILE}.txt"
<               mv "${STATDIR}/temp/${FILE}.txt" "${STATDIR}/${FILE}.qtxt"
---
>               cat "${STATDIR}/${FILE}.txt" | awk ' { xlabel=""; printf $1 "\t""\""; for (i=2;i<=NF;i++){ xlabel=xlabel$i" ";} print substr(xlabel,1,35) " [" $1 "]\"" }' > "${STATDIR}/${FILE}.qtxt"
433a433
> EVALDATE=$(date)
439c439
< htmlprint "<h3>out of ${NOPICT} raw files</h3>\n<BR>\n" "${INDEXFILE}"
---
> htmlprint "<h3>${EVALDATE} out of ${NOPICT} ${FILEEXT} files</h3>\n<BR>\n" "${INDEXFILE}"
460,461c460,461
< # do the dishes
< rm -r ${STATDIR}/temp
---
> # do the dishes if not in debug mode
> [ $VERBOSELEVEL -gt 0 ] && rm -r ${STATDIR}/temp
465,469c465,471
< NOW=$(date +%s)
< DIFF=$(($NOW - $BEGIN))
< MINS=$(($DIFF / 60))
< SECS=$(($DIFF % 60))
< echo "Time elapsed: $MINS:`printf %02d $SECS`"
---
> if [ $VERBOSELEVEL -lt 2 ]; then
>       NOW=$(date +%s)
>       DIFF=$(($NOW - $BEGIN))
>       MINS=$(($DIFF / 60))
>       SECS=$(($DIFF % 60))
>       echo "Time elapsed: $MINS:`printf %02d $SECS`"
> fi

Es wird ein Erstellungsdatum im Header der Webseite ausgegeben, der Filename steht in temp/imgdatap.txt um das debugging zu erleichtern, im debug-Mode (-d 0) werden das temp-Verzeichnis nicht gelöscht.

Damit ist für mich jetzt erst mal Schluss mit entwickeln - ab morgen wird wieder gearbeitet.

Gruss, Klaus

PS: um Missverständnisse zu vermeiden - ich biete den Download nur als Erleichterung an. Bei copy&paste aus Forumsbeiträgen gehen z.B. die Tabulatoren verloren ... Ich will mich also keinesfalls mit fremden Federn schmücken !
 
Beim Umbau hab ich noch einen Fehler bemerkt. Die Werte für "Focus.*" werden doppelt ausgewertet und sind in den Statistiken damit doppelt so hoch:
Code:
...
grep 'Flash.*:' < eval/temp/imgdatap.txt  |cut --delimiter=: -f2 > eval/temp/d_flash.txt
[B]grep 'Focus.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_focus.txt[/B]
grep 'Metering.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_meter.txt
[B]grep 'Focus.*:' < eval/temp/imgdatap.txt |cut --delimiter=: -f2 > eval/temp/d_af.txt[/B]
...
Nein, ganz so stimmt es nicht. Beide werden ja in eigene Datein geschrieben und dann beide eigenständig verarbeitet. Falsch ist an der Stelle also nichts, auch nicht doppelt so hoch, nur sinnlos. Die wichtigere Stelle ist
Code:
LANGUAGE=C exiftool -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash [B]-FocusMode[/B] -MeteringMode [B]-FocusMode[/B] -ShootingMode -Orientation "$FILE" >>eval/temp/imgdatap.txt &
Hier gibt es zwei mal die Option -FocusMode, wodurch es zum doppelten Eintrag schon in der imgdatap.txt kommt.

Lösung: Ein "-FocusMode" löschen, sinnvoller Weise dann auch noch die doppelte Behandlung löschen, d.h. die Breiche, in denen d_focus.txt oder d_af.txt verarbeitet werden.
 
Nein, ganz so stimmt es nicht. Beide werden ja in eigene Datein geschrieben und dann beide eigenständig verarbeitet. Falsch ist an der Stelle also nichts, auch nicht doppelt so hoch, nur sinnlos. Die wichtigere Stelle ist
Code:
LANGUAGE=C exiftool -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash [B]-FocusMode[/B] -MeteringMode [B]-FocusMode[/B] -ShootingMode -Orientation "$FILE" >>eval/temp/imgdatap.txt &
Hier gibt es zwei mal die Option -FocusMode, wodurch es zum doppelten Eintrag schon in der imgdatap.txt kommt.

Lösung: Ein "-FocusMode" löschen, sinnvoller Weise dann auch noch die doppelte Behandlung löschen, d.h. die Breiche, in denen d_focus.txt oder d_af.txt verarbeitet werden.

Ah, klar ... natürlich hast Du recht und ich hab die falsche Stelle angemerkt.

Gruss, Klaus
 
WERBUNG
Zurück
Oben Unten