Ich importiere häufig Fotos und Videos (meistens mit JPG- und MOV-Erweiterungen) von Digitalkameras und Tablets auf meinen PC und möchte, dass sie nach den Daten und Zeiten sortiert werden, zu denen sie bereits in ihren EXIF-Daten enthalten waren. Und daher möchte ich sie alle vorzugsweise mit einem einfachen Nautilus-Skript umbenennen, indem ich vorzugsweise die Datums- und Zeitstempel vor jedem Dateinamen einfüge.
Ich habe es bisher nur geschafft, das folgende Nautilus-Skript zusammenzubringen, von dem ich glaube, dass es alles andere als perfekt ist:
for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i""
done
Was mir bei dieser Umbenennungsmethode nicht gefällt, sind die in EXIF-Datums- und Zeitstempeln verwendeten Doppelpunkte (z. B. "2013: 09: 03 20: 55: 09_IMG_0108.JPG"), die Probleme beim späteren Übertragen dieser Dateien in andere Umgebungen verursachen können ( zB Windows).
Dieser Befehl (mit exiv2 anstelle von exiftool ) ermöglicht die bequeme Bearbeitung von Datums- und Zeitstempeln. Sein Nachteil ist jedoch, dass er bei Videodateien (z. B. MOV-Dateien) nicht funktioniert :
exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"
Ich hoffe also, dass jemand eine bessere Lösung finden kann. Und es wäre magisch, wenn es sogar gelingen würde, die ursprünglichen Dateinamen und Erweiterungen auch in Kleinbuchstaben umzuwandeln!
Antworten:
Sie können das Namensschema durchlaufen
sed
, um die Doppelpunkte durch Bindestriche und Leerzeichen durch Unterstriche zu ersetzen:Um das Ganze in Kleinbuchstaben zu schreiben, können Sie Folgendes verwenden
rename
:Oder Sie können dies in Ihrem Skript tun, indem Sie
sed
wie folgt vorgehen :... und verwenden Sie dann die
$j
Variable anstelle des Finales$i
Ihrermv
Zeile. Diese sed-Methode ist etwas portabler (wenn Ihnen das wichtig ist), da verschiedene Linux-Distributionen unterschiedliche Umbenennungsbefehle haben, während sed universell ist.Alternativ kann das Skript wie folgt geändert werden, um zu Beginn eine Dateinamenkonvertierung in Kleinbuchstaben durchzuführen. Verwenden Sie
tr
stattdessen Folgendes :Um leicht unterschiedliche Befehle für verschiedene Dateitypen auszuführen, kann in diesem Skript eine bash case-Anweisung verwendet werden. Zum Beispiel:
In diesem Beispiel wird das Umbenennen von MOV-Dateien mit CreateDate-Zeitstempeln JEDER ANZAHL von Stunden NACH ODER VOR JPG-Dateien angepasst, indem andere (-tur) EXIF-Daten verwendet und dieses Zeitdifferenzsuffix entfernt werden. Möglicherweise muss -tur Teil geändert werden entsprechend dem im System eingestellten Ort.
quelle
$i
,$j
um nichts zu tun). Stattdessen habe ich zu Beginn die Dateinamenkonvertierung in Kleinbuchstaben eingefügt und mir erlaubt, diese als weitere Option (die zumindest für mich funktioniert hat) am Ende Ihrer Antwort hinzuzufügen, damit ich Ihre Antwort akzeptieren kann. Natürlich können Sie Ihre Antwort nach Belieben weiter bearbeiten.Ich musste meine Fotos umbenennen und fand diese Frage hier - ich habe gerade herausgefunden, dass
exiftool
sie nativ behandelt wird:Von http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html
Wenn Sie den ursprünglichen Dateinamen verfolgen und die Erweiterung in Kleinbuchstaben schreiben möchten:
Das gleiche funktioniert auch mit dem gesamten Dateinamen in Kleinbuchstaben:
quelle
Ich weiß, dass Sie gesagt haben, dass Sie ein Skript bevorzugen. Wenn Sie jedoch für eine kostenlose Java-Anwendung offen sind, können Sie AmoK Exif Sorter verwenden
quelle
Ich würde dafür verwenden
krename
. Esquelle
Der Pyrenamer funktioniert auf meinem neu installierten Ubuntu 16.04 nicht, daher muss ich auch einen anderen Weg finden, um dieses Problem zu lösen.
Ich habe Dateien wie IMG_0001.JPG, IMG_0002.JPG, ... in einem Ordner. Überprüfen Sie diese Website unter /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash
Installieren Sie zuerst "exiv2" und ich habe die folgende Befehlszeile geschrieben:
für img in $ (ls *. [Jj] [Pp] [Gg] 2> / dev / null); exiv2 -r '% Y% m% d_% H% M% S _' "$ (tmp = $ {img %%. *}; echo $ {tmp ## * _})" benenne "$ img" um; getan
Die Ausgabedateinamen lauten JJJJMMTT_HHMMSS_0001.JPG, JJJJMMTT_HHMMSS_0002.JPG usw. Selbst wenn die Fotos in derselben Sekunde aufgenommen wurden, macht die ursprüngliche Fotoseriennummer den Unterschied.
quelle