如何根据文件名更新exif DateTimeOriginal?

时间:2019-01-30 19:18:05

标签: bash perl photo exiftool

我想使用Google相册共享1万张照片。这些图像是 扫描,因此它们没有正确的DateTimeOriginal按时间顺序排序。

我需要将DateTimeOriginal更新为YYYY:01:01 00:00:00,以允许我在Google相册中整理这些照片以进行共享 并有秩序感。我的理解是Google使用exif DateTimeOriginal进行排序。

我的照片命名约定:

1967年Smith G&J婚礼-3.jpg

1962年史密斯家庭聚会-87.jpeg

1990年史密斯50周年-16.jpeg

我尝试过:

exiftool "-datetimeoriginal < ${filename;$_=substr($_,0,3)} 01:01 12:00:00" DIR

但收到BASH“替换错误”

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

有可能是一个更好的方法,但这种作品:

#!/bin/bash
for f in *.jpg; do
   year=$(grep -Eo "^\d+" <<< "$f")
   echo File: $f, setting year:$year
   exiftool "-datetimeoriginal=${year}01:01 12:00:00" "$f"
done

调试输出

File: 2013 Family Reunion.jpg, setting year:2013
    1 image files updated
File: 2017 Some wedding.jpg, setting year:2017
    1 image files updated

尝试复制在临时目录中的文件!

答案 1 :(得分:2)

您与原件很近,但是正如@Grinnz所说,您需要使用单引号。此外,您希望获得今年的前4个数字,但只获得3个。

所以尝试:
exiftool '-DateTimeOriginal<${filename;$_=substr($_,0,4)} 01:01 12:00:00' FileOrDir

exiftool的启动时间是其最大的性能影响,因此您会发现这比循环遍历每个文件要快得多(请参见exiftool Common Mistake #3)。

此命令创建备份文件。添加-overwrite_original以禁止创建备份文件。添加-r以递归到子目录中。