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


11

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

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

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

从以下意义上说,该命令应该是稳定的:如果我再次在相同的目录结构上执行它(也许在添加新图片之后),则已重命名的图片不应更改,并且如果添加了具有现有文件名的图片,则新文件名应该是唯一的也一样

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


1
提取时间戳,构建文件名,检查现有文件名,修改(添加后缀或类似名称)(如果存在),然后添加mv文件。
库萨兰达

通过在exiv2命令中添加选项,还有更直接的方法吗?
学生

因此,使用exiftool的答案将类似于:exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .。也许您可以将您的评论变成答案。
学生

Answers:


17

你可能想尝试jhead,而不是它确实是乱的盒(带ab...... 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开头的数字后缀-


3

我的版本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}_...。为简化起见,我仅从set 0..9和中查找_正则表达式的20个字符的混合[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' ...

1

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 *

0

萤火虫无法在新安装的Ubuntu 16.04上使用,因此我也必须找到另一种方法来解决此问题。

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

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

for $ {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等。即使照片是在同一时间拍摄的,原始照片序列号也会有所不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.