Wenn ich Bilder über exiv in die exif-Datumszeit umbenenne, gehe ich wie folgt vor:
find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;
Jetzt kann es vorkommen, dass Bilder genau den gleichen Zeitstempel haben (einschließlich Sekunden). Wie kann ich den Dateinamen automatisch eindeutig machen?
Der Befehl sollte in dem Sinne stabil sein, dass sich die bereits umbenannten Bilder nicht ändern sollten, wenn ich ihn erneut in derselben Verzeichnisstruktur ausführe (möglicherweise nach dem Hinzufügen neuer Bilder). Wenn Bilder mit bereits vorhandenen Dateinamen hinzugefügt werden, sollten die neuen Dateinamen eindeutig sein auch.
Mein erster Versuch war nur, den ursprünglichen Basisnamen im resultierenden Dateinamen zu belassen, aber dann wäre der Befehl im obigen Sinne nicht stabil.
command-line
exif
Schüler
quelle
quelle
mv
die Datei.exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .
. Vielleicht könnten Sie Ihren Kommentar in eine Antwort verwandeln.Antworten:
Vielleicht mögen Sie versuchen
jhead
stattdessen , das tut , dass out-of-the-Box (mita
,b
...z
Suffixe zu 27 Dateien mit dem gleichen Datum ermöglicht up) und nicht das Stabilitätsproblem durch @meuh erwähnt:Oder mit
exiftool
(Beispiel in der Manpage):(hier mit
%-c
einem numerischen Suffix beginnend mit-
)quelle
Meine Version von
exiv2
(0.25 001900) fragt interaktiv, was zu tun ist, wenn der Dateiname bereits vorhanden ist.Durch Hinzufügen einer Option
-F
wird dem Namen stattdessen automatisch ein zusätzliches_1
(oder_2
usw.) hinzugefügt .Wenn der Befehl ein zweites Mal ausgeführt wird, heißt es:
und tut nichts, aber es wird verwirrt, wenn es das
_1
Teil gibt, und wird es umbenennen_2
. Es wird bei jedem Lauf zerstörungsfrei umgeschaltet. Sie können dies ignorieren, wenn Sie möchten, oder Ihrfind
Muster ändern , um Dateien zu ignorieren, die dem Datumsmuster mit einem_
Teil entsprechen.Beispielsweise beginnt das Regex-Muster für das Datumsformat
[0-9]{4}_[0-9]{2}_...
. Zur Vereinfachung suche ich nur nach einer Mischung aus 20 Zeichen aus dem Set0..9
und_
, die Regex ist[0-9_]{20}
. Dazu ist das Suffix_
gefolgt von mindestens 1 zu suchenden Ziffer_[0-9]{1,}.jpg
. Da der reguläre Ausdruck mit dem gesamten Pfad und nicht nur mit dem Basisnamen übereinstimmen muss, lautet der endgültige reguläre Ausdruck einschließlich des Verzeichnisses.*/[0-9_]{20}_[0-9]{1,}.jpg
.Sie können also einen Fund verwenden wie:
quelle
Exiv2 kann alleine damit umgehen. Ich habe auch viel Zeit damit verbracht, Hilfe zu suchen, bis ich das exiv2-Handbuch gelesen habe. Die Option -F löst dieses Problem.
Am Ende wird ein _N angehängt, wenn die Datei bereits vorhanden ist.
Und für diejenigen, die nach einer Option suchen, mit der Ordner erstellt werden können.
quelle
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; erledigt
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