#!/bin/bash
#uups, das gibt's schon, jhead kann es
#aber nicht richtig..
#modifikation: verwende Datum und Uhrzeit original - hatte ich nicht bedacht
# author: Karsten Roemke
# entstanden: ca 2003
echo "Verwende das Datum aus exif info, um namen der datei auf Datum zu setzen"
echo "es werden alle jpegs des Verzeichnisses umbenannt, ausser exif klappt nicht"
echo "original-namen anhaengen (N/j)?"
read append

for i in *.jpg *.JPG
do 
  # das war der fehler - erstes Dat gesucht - da hat aber windows etwas hereingeschrieben
  dateTimeOld=$(exif $i | grep -m 1 "Dat" | cut -c 22-40)
  #hole mir nur das passende tag
  dateTime=$(exif $i -t DateTimeOriginal | grep -m 1 "Value" | cut -c 10-28)
  #echo "win: ->$dateTimeOld<-"
  #echo "org: ->$dateTime<-"
  #continue
  
  if [[ $dateTime"." = "." ]]
  then
    echo $i has no exif - or is actually renamed -  we do nothing
  else  
    #echo $dateTime 
    dat=$(echo $dateTime | cut -c 1-10)
    tim=$(echo $dateTime | cut -c 12-19)
    dat=${dat//:/-}
    #tim=${tim//:/h}
    #echo $dat"-"$tim
    dateTime="$dat $tim"
    name=$(date -d "$dateTime" +"%Y-%m-%d-%A-%Hh%M") #format mit wochentag ohne sekunde
    if [[ $append"." = "j." ]]
    then
       mv -v "$i" "$name-$i-.jpg" # name ist eindeutig
    else
       #gibt es eine Datei, die bis zu den Minuten genauso heisst?
       hits=$(find . -maxdepth 1 -name "$name*.jpg" | wc -l | cut -f 1 -d ' ')
       #echo "hits: $hits"        
       if [[ $name.jpg = $i ]]
       then 
         echo "$i has the right name"
       elif (( hits > 0 )) 
       then
         # es gibt welche
         #--------------------------------------------------------------------------
         if [[ -e $name.jpg ]] # datei ohne sekunden exisiert
         then 
            #Datei existiert, auch dieser Datei werden die Sekunden angefuegt damit
            #die Sortierung wieder stimmt
            #datum der vorhandenen Datei auslesen
            dateTimeExist=$(exif "$name.jpg" | grep -m 1 Dat | cut -c 22-40)           
	    dat=$(echo $dateTimeExist | cut -c 1-10)
    	    tim=$(echo $dateTimeExist | cut -c 12-19)
            dat=${dat//:/-}
    	    #echo $dat"-"$tim
    	    dateTimeExist="$dat $tim"            
            #und umbenennen
            nameNew=$(date -d "$dateTimeExist" +"%Y-%m-%d-%A-%Hh%Mm%S") # mit sekunden
            mv -v "$name.jpg" "$nameNew.jpg"
          fi
          #-------------------------------------------------------------------------
         #namen mit Sekunden bestimmen
         name=$(date -d "$dateTime" +"%Y-%m-%d-%A-%Hh%Mm%S") # mit sekunden
         if [[ $name.jpg != $i ]] #sonst liegt der file-Name bereits mit Sekundne vor
         then
            if [[ -e $name.jpg ]] 
            then 
              mv -v "$name.jpg" "$name-0.jpg"         
              counter=1;
              while [[ -e $name-$counter.jpg ]]
              do 
                echo "file $name-$counter.jpg existiert"
                let counter=$counter+1
              done;  
              mv -v "$i" "$name-$counter.jpg"
            else
              mv -v "$i" "$name.jpg"
            fi                     
         else
            echo "$i has the right name"
         fi        
         
       else #$name ist noch nicht vorhanden
         mv -v "$i" "$name.jpg"
       fi       
    fi
  fi         
done
