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

How do I update exif DateTimeOriginal based on filename?

我想使用 Google 张照片分享 10K 张照片。这些图像是 已扫描,因此他们没有按时间顺序排列的正确 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 "bad substitution error"

如有任何帮助,我们将不胜感激。

可能有更好的方法,但这个有效:

#!/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

尝试在临时目录中 COPY 文件!

您已经接近原件了,但正如@Grinnz 所说,您需要使用单引号。此外,您想要当年的前 4 个数字,但您只获取了 3 个。

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

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

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