-d '%Y-%m-%d_%H.%M.%S' -> YYYY:MM:DD HH:MM:SS - what is wrong?

Started by tony.blue, September 05, 2023, 09:04:15 AM

Previous topic - Next topic

tony.blue

Ich habe ein bash script geschrieben, das den Dateinamen analog dem Parameter "CreateDate" neu setzt.

Bei den Fotos aus dem Apple iPhone erhalte ich sogenannte "Live-Bilder", die mit dem gleichen Dateinamen sowohl aus einem .EXIF als auch ein .MOV bestehn. Damit das iPhone weiterhin die Live-Bilder erkennt müssen die Dateinamen gleich sein. Tatsächlich ist das CreateDate des MOV kurze Zeit nach dem EXIF.

Damit trotzdem funktionierende Life-Bilder entstehen soll im Script das CreateDate des EXIF sowohl für den Dateinamen des EXIF als auch für das MOV verwendet werden.

Beim Auslesen per "datumexif=$(exiftool -b -m -s -d '%Y-%m-%d_%H.%M.%S' -CreateDate "$datei")" erhalte ich die Werte immer im Format "YYYY:MM:DD HH:MM:SS" (also mit Doppelpunkten getrennt.

Was mache ich falsch, dass das vorgegebene Format '%Y-%m-%d_%H.%M.%S' nicht verwendet wird.

Als Workarround (siehe unten) habe ich in Bash die Angabe mit Doppelpunkt aufwändig wieder in das korrekte Format gebracht.

Hat jemand einen Tipp für mich, wie ich exiftool dazu bringen kann, das vorgegebene Format auszugeben?

Vielen Dank!

Tony

#!/bin/bash

# Frage nach dem Arbeitsverzeichnis
read -p "In welchem Unterverzeichnis stehen die nach EXIF-Daten umzubenenden Dateien? " arbeitsverzeichnis
# Erstelle das tmpworking Verzeichnis
cd "$arbeitsverzeichnis"
mkdir "tmpworking"
# Verschiebe alle Dateien aus dem Arbeitsverzeichnis in tmpworking
mv *.* "tmpworking/"
cd tmpworking

#####################################
# Bearbeite alle jpg/heic-Dateien um bei den Live-Dateien den gleichen Dateinamen zu erhalten

# Für jede Datei in tmpworking
for datei in IMG_*.{jpg,heic,JPG,HEIC}; do

  # Verschiebe die Datei in das Arbeitsverzeichnis
  # echo "mv " "${datei%.*}.*" "../"
  mv "${datei%.*}".* "../" > /dev/null 2>&1 &
  cd ../

  # Benenne die Datei um mit exiftool
 datumexif=$(exiftool -b -m -s -d '%Y-%m-%d_%H.%M.%S' -CreateDate "$datei")

  # Setze die Variable formatiert mit dem Format "JJJJ-MM-TT_HH.MM.SS"

  namenserweiterung="${datumexif//:/-}" # Ersetze alle ":" durch "-"
  namenserweiterung="${namenserweiterung/ /_}" # Ersetze das erste Leerzeichen durch "_"
  namenserweiterung2="${namenserweiterung/#*_/}" # Entferne alles bis zum ersten "_"
  namenserweiterung2="${namenserweiterung2//-/.}" # Ersetze alle "-" durch "."
  namenserweiterung="${namenserweiterung%_*}"_"$namenserweiterung2" # Füge den Teil vor dem ersten "_" wieder hinzu
  dateinameneu="$namenserweiterung"_${datei%.*}

  if [[ -f "${datei%.*}.heic" ]]; then
        mv "${datei%.*}.heic" $dateinameneu.heic
  fi

  if [[ -f "${datei%.*}.HEIC" ]]; then
        mv "${datei%.*}.HEIC" $dateinameneu.HEIC
  fi

  if [[ -f "${datei%.*}.jpg" ]]; then
        mv "${datei%.*}.jpg" $dateinameneu.jpg
  fi

  if [[ -f "${datei%.*}.JPG" ]]; then
        mv "${datei%.*}.JPG" $dateinameneu.JPG
  fi

  if [[ -f "${datei%.*}.mov" ]]; then
        mv "${datei%.*}.mov" $dateinameneu.mov
  fi

  if [[ -f "${datei%.*}.MOV" ]]; then
        mv "${datei%.*}.MOV" $dateinameneu.MOV
  fi

  if [[ -f "${datei%.*}.mp4" ]]; then
        mv "${datei%.*}.mp4" $dateinameneu.mp4
  fi

  if [[ -f "${datei%.*}.MP4" ]]; then
        mv "${datei%.*}.MP4" $dateinameneu.MP4
  fi

cd tmpworking
done


#############################################
# Benenne die restlichen Dateien um mit exiftool
# exiftool '-FileName<${CreateDate}%-c-${FileName}' -d '%Y-%m-%d_%H.%M.%S' -r -ext mov -ext MOV -ext mp4 -ext MP4  "$arbeitsverzeichnis/tmpworking"
exiftool '-FileName<${CreateDate}%-c_${FileName}' -d '%Y-%m-%d_%H.%M.%S' -r -ext mov -ext MOV -ext mp4 -ext MP4 -ext jpg -ext JPG -ext HEIC -ext heic "."
# Verschiebe die restlichen Dateien in das Arbeitsverzeichnis
mv * ../
cd ../
# Wenn das tmpworking Verzeichnis leer ist
if [[ ! "$(ls -A tmpworking)" ]]; then
  # Lösche das tmpworking Verzeichnis
  rmdir "tmpworking"
fi


StarGeek

Sorry, but unfortunately I don't speak any other language than English.

But I think your problem is that you are including the -b (-binary) option, which disables exiftool's PrintConv function needed to reformat the date.

Example
C:\>exiftool -b -m -s -d "%Y-%m-%d_%H.%M.%S" -createdate y:\!temp\Test4.jpg
2023:09:04 11:00:00
C:\>exiftool -m -s -d "%Y-%m-%d_%H.%M.%S" -createdate y:\!temp\Test4.jpg
CreateDate                      : 2023-09-04_11.00.00

If you need the CreateDate without any other text, then you can use the -S (-veryShort) option
C:\>exiftool -S -m -s -d "%Y-%m-%d_%H.%M.%S" -createdate y:\!temp\Test4.jpg
2023-09-04_11.00.00
"It didn't work" isn't helpful. What was the exact command used and the output.
Read FAQ #3 and use that cmd
Please use the Code button for exiftool output

Please include your OS/Exiftool version/filetype