Exiftool: Rename From Date
I got a GoPro recently and it names the files with seemingly random combination
of some letters and numbers. I have gotten quite used to my phone naming photos
as DATE_TIME.jpg. It just makes more sense to me. Luckily, the date and time
are still set in the EXIF tags and those can be used to rename the file.
Using exiftool, the renaming is one magic incantation away.
Add a -verbose flag to have it tell you what each file is renamed to.
exiftool -d '%Y%m%d_%H%M%S%%-c.%%e' '-filename<CreateDate' .
Let’s unpack what happens here.
The -d flag is to specify how to format the date. The first 6 % might be
familiar to you if you are a programmer: %Y is the year in four numbers, %m
is zero padded month, %d is zero padded day of the month, %H is zero padded
hour, %M is zero padded minutes, and %S is zero padded seconds. %%-c is
one thing. The double % is to escape the date formatting and drop back to
regular exiftool formatting. In regular exiftool formatting, the %-c will add
a copy number if two filenames would otherwise overlap (in our case: they were
taken in the same second). It adds a dash and a number to the second file (or
third file, and so on). The %%e is again one thing with double % dropping
back to regular exiftool formatting. In that formatting, %e is the file’s
extension.
The other flag reads the CreateDate field out of the EXIF tags and writes it
(<) to the filename.
The final . tells exiftool to process the directory, you can also pass in
specific files instead.
A file is thus renamed to, for example, 20240720_121232.jpg. If a second
photo was taken in that same second, it will be named 20240720_121232-1.jpg.
Note that the exiftool manpage has some more details about the %c formatter:
For %c, these modifiers have a different effects. If a field width is given, the copy number is padded with zeros to the specified width. A leading ‘-‘ adds a dash before the copy number, and a ‘+’ adds an underline. By default, the copy number is omitted from the first file of a given name, but this can be changed by adding a decimal point to the modifier. For example:
-w A%-cZ.txt # AZ.txt, A-1Z.txt, A-2Z.txt ... -w B%5c.txt # B.txt, B00001.txt, B00002.txt ... -w C%.c.txt # C0.txt, C1.txt, C2.txt ... -w D%-.c.txt # D-0.txt, D-1.txt, D-2.txt ... -w E%-.4c.txt # E-0000.txt, E-0001.txt, E-0002.txt ... -w F%-.4nc.txt # F-0001.txt, F-0002.txt, F-0003.txt ... -w G%+c.txt # G.txt, G_1.txt G_2.txt ... -w H%-lc.txt # H.txt, H-b.txt, H-c.txt ... -w I.%.3uc.txt # I.AAA.txt, I.AAB.txt, I.AAC.txt ...