将图像重命名为 exif 时间:制作唯一的文件名

将图像重命名为 exif 时间:制作唯一的文件名

如果我通过 exiv 将图像重命名为 exif 日期时间,我将执行以下操作:

find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;

现在可能会出现图片具有完全相同的时间戳(包括秒)的情况。如何使文件名自动唯一?

该命令应该是稳定的,因为如果我再次在相同的目录结构上执行它(可能在添加新图片之后),已重命名的图片不应更改,并且如果添加具有现有文件名的图片,则新文件名应该是唯一的以及。

我的第一次尝试只是将原始基本名称保留在结果文件名中,但是该命令在上述意义上将不稳定。

答案1

你可能想尝试jhead相反,它是开箱即用的(带有a, b...z后缀,允许最多 27 个具有相同日期的文件)并且不存在 @meuh 提到的稳定性问题:

find . -iname '*jpg' -exec jhead -n%Y_%m_%d__%H_%M_%S {} +

或使用exiftool(手册页中的示例):

exiftool -ext jpg '-FileName<CreateDate' -d %Y_%m_%d__%H_%M_%S%%-c.%%e .

(这里%-c是一个以 ; 开头的数字后缀-;如果文件已经存在则添加)

(贡献答案并根据评论进行更正):

如果您想保留原始文件名,只需添加_%%f

 exiftool -ext jpg '-FileName<CreateDate' -d %Y_%m_%d__%H_%M_%S%%-c_%%f.%%e .

答案2

我的版本exiv2(0.25 001900) 会以交互方式询问当文件名已经存在时要做什么。

exiv2: File `./2013_06_19__14_03_13.jpg' exists. [O]verwrite, [r]ename or [s]kip? 

通过添加选项,-F它会自动在名称中添加额外的_1(或等)。_2

Renaming file to ./2013_06_19__14_01_53_1.jpg, updating timestamp

如果该命令第二次运行,它会显示:

This file already has the correct name

并什么也不做,但如果有该_1部分,它会感到困惑,并将重命名它_2。每次运行时它都会以非破坏性的方式像这样切换。如果您愿意,可以忽略此选项,或者更改您的find模式以忽略与某个部分的日期模式匹配的文件_

例如,日期格式的正则表达式模式开始[0-9]{4}_[0-9]{2}_...。为了简化起见,我将只从集合0..9和中查找 20 个字符的混合_,即 regex [0-9_]{20}。为此_,后跟至少 1 位要查找的数字的后缀是_[0-9]{1,}.jpg。由于正则表达式必须匹配整个路径,而不仅仅是基本名称,因此包括目录的最终正则表达式是.*/[0-9_]{20}_[0-9]{1,}.jpg.

所以你可以使用这样的查找:

find . -regextype posix-extended ! -iregex '.*/[0-9_]{20}_[0-9]{1,}.jpg' -iname '*.jpg' ...

答案3

Exiv2 可以自行处理。我也花了很多时间寻求这方面的帮助,直到我去看了 exiv2 手册。 -F 选项解决了这个问题。

exiv2 -r'%Y_%m_%d__%H_%M_%S' -F *.jpg

如果文件已经存在,它将在末尾附加 _N。

对于那些正在寻找允许创建文件夹的选项的人。

exiftool -r '-FileName<DateTimeOriginal' -d %Y/%m/%d/%%f%%-c.%%e *

答案4

Pyrenamer 在我新安装的 Ubuntu 16.04 上不起作用,因此我也必须找到另一种方法来解决这个问题。

我的一个文件夹中有 IMG_0001.JPG、IMG_0002.JPG 等文件。检查这个网站, https://stackoverflow.com/questions/917260/can-var-parameter-expansion-expressions-be-nested-in-bash

首先安装“exiv2”,我编写了以下命令行:

对于 $(ls *.[Jj][Pp][Gg] 2> /dev/null) 中的 img;执行 exiv2 -r'%Y%m%d_%H%M%S_'"$(tmp=${img%%.*};echo ${tmp##*_})" 重命名 "$img" ;完毕

输出文件名为 YYYYMMDD_HHMMSS_0001.JPG、YYYYMMDD_HHMMSS_0002.JPG 等。即使照片是在同一秒拍摄的,原始照片的序列号也会有所不同。

相关内容