GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie benenne ich mehrere Fotos und Videos basierend auf Exif-Daten um?

Ich importiere oft Fotos und Videos (meistens mit JPG- und MOV-Erweiterungen) von Digitalkameras und Tablets auf meinen PC, und ich möchte sie am liebsten sortiert nach Datum und Uhrzeit der Aufnahme sehen bereits in ihren EXIF-Daten vorhanden. Und daher mein Wunsch, sie alle umzubenennen vorzugsweise mit einem einfachen Nautilus-Skript indem vorzugsweise Datums- und Zeitstempel vor jedem Dateinamen eingefügt werden.

Ich habe es bisher nur geschafft, das folgende Nautilus-Skript zusammenzustellen, das meines Erachtens alles andere als perfekt ist:

for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i"" 
done

Was mir an dieser Umbenennungsmethode nicht gefällt, sind die Doppelpunkte, die in EXIF-Datums- und Zeitstempeln verwendet werden (z. B. „2013:09:03 20:55:09_IMG_0108.JPG“), was zu Problemen führen kann, wenn diese Dateien später in andere Umgebungen (z. B. Windows) übertragen werden.

Dieser Befehl (unter Verwendung von exiv2 statt exiftool ) ermöglicht bequem die Manipulation von Datums- und Zeitstempeln, hat aber den Nachteil, dass es nicht mit Videodateien (z. B. MOV) funktioniert :

exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"

Also hoffe ich, dass jemand eine bessere Lösung finden kann. Und es wäre magisch, wenn es sogar gelänge, die ursprünglichen Dateinamen und Erweiterungen auch in Kleinbuchstaben umzuwandeln!

Akzeptierte Antwort:

Was mir an dieser Umbenennungsmethode nicht gefällt, sind die Doppelpunkte, die in EXIF-Datums- und Zeitstempeln verwendet werden (z. B. Windows).

Sie könnten das Namensschema über sed ausführen , um die Doppelpunkte durch Bindestriche und Leerzeichen durch Unterstriche zu ersetzen, etwa so:

mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"

Um das Ganze in Kleinbuchstaben umzuwandeln, könnten Sie rename verwenden :

rename 's/(.*)/\L$1/' file.JPG
##  or
rename 's/(.*)/\L$1/' *.*

Oder Sie könnten es innerhalb Ihres Skripts mit sed tun , wie in:

j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')

…und dann den $j verwenden Variable anstelle des abschließenden $i Ihres mv Linie. Dieser sed-Weg ist etwas portabler (falls Ihnen das wichtig ist), da verschiedene Linux-Distributionen unterschiedliche Umbenennungsbefehle haben, während sed universell ist.

Alternativ kann das Skript auch wie folgt modifiziert werden, um die Umwandlung der Dateinamen in Kleinbuchstaben am Anfang mit tr durchzuführen stattdessen:

for arg 
do
  tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
  mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done

Um leicht unterschiedliche Befehle für verschiedene Dateitypen auszuführen, kann in diesem Skript eine Bash-Case-Anweisung verwendet werden. Zum Beispiel:

#! /usr/bin/env bash
for filename in ./*
do
  tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
  case "$filename" in
    *.MOV|*.mov) 
      mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
      ;;
    *.JPG|*.jpg)
      mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
      ;;
    *)
      echo 'Not a *.jpg or a *.mov!'
      ;;
  esac
done

In diesem Beispiel wird die Umbenennung von MOV-Dateien mit CreateDate-Zeitstempeln BELIEBIG ANZAHL Stunden NACH ODER VOR JPG-Dateien angepasst, indem andere (-tur) EXIF-Daten verwendet und das Suffix dieses Zeitunterschieds entfernt werden, und es kann erforderlich sein, dies zu ändern -tur Teil entsprechend dem im System eingestellten Ort.


Ubuntu
  1. So finden und entfernen Sie doppelte Fotos in Linux

  2. Wie benenne ich mehrere Dateien mit Find um?

  3. Wie organisiert/sortiert man Bilder nach Exif-Bilddaten?

  4. So benennen Sie mehrere Dateien gleichzeitig in Linux um

  5. So benennen Sie Git Branch Local und Remote um

So benennen Sie Dateien und Verzeichnisse in Ubuntu 20.04 um

Fwbackups – So installieren und sichern Sie Ihre Daten auf Ubuntu

So führen Sie Daten unter Linux zusammen

So installieren Sie ELK Stack (Elasticsearch, Logstash und Kibana) unter Ubuntu 20.04

So entfernen Sie Datei-Exif-Daten mit ExifTool in Ubuntu 20.04

So benennen Sie Dateien und Verzeichnisse in Linux um