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.
Es wird nur das aktuelle Verzeichnis bearbeitet, hier werden alle *.jpg und *.JPG Dateien verwendet.
Das Script liest dabei mittels des Programms
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