construct object
Home sweet home
Nav
hide
S1
S2
S3
Name: photoDateRename
Typ: bash
benötigt: exif (unix-program)
PhotoDateRename ist ein Script, das alle Photos so umbenennt, dass Ihr Dateiname anschließend dem Datum der Aufnahme entspricht. Hat man dabei bis auf die Minute identische Zeiten, so werdeb die Sekunden an alle Dateien angehängt, die in dieser Minute aufgenommen wurden.
Es wird nur das aktuelle Verzeichnis bearbeitet, hier werden alle *.jpg und *.JPG Dateien verwendet.

Das Script liest dabei mittels des Programms exif die Informationen aus.

eine Gewähr auf korrekte Funktion wird nicht gegeben, sie sollten also noch ein Backup der Daten haben.

Der Quelltext:

hide
photoDateRename
#!/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
 
Parsed using GeSHi 1.0.8.6
Download / View Source / Run it   (depends on file type)

Karsten Römke (k Ponkt roemke at gmx in de), Rechtliches, Datenschutz, etc.
Rein private Seite, lediglich eine Spielerei
Last modified: 2010-03-31
Created: 2010-03-05
Reason: –
Home sweet home