鉴于 EXIF 数据,如何重命名照片?

Tom*_*mas 16 bash python rename exif

假设我有一堆照片,所有照片都有正确的 EXIF 信息,并且照片是随机命名的(因为我遇到了问题)。我有一个名为的小程序jhead,它给了我以下输出:

$ jhead IMG_9563.JPG

File name    : IMG_9563.JPG
File size    : 638908 bytes
File date    : 2011:02:03 20:25:09
Camera make  : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time    : 2011:02:03 20:20:24
Resolution   : 1500 x 2000
Flash used   : Yes (manual)
Focal length :  5.0mm  (35mm equivalent: 29mm)
CCD width    : 6.17mm
Exposure time: 0.0080 s  (1/125)
Aperture     : f/3.1
Focus dist.  : 0.29m
ISO equiv.   : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
Run Code Online (Sandbox Code Playgroud)

现在我需要以下一个格式重命名文件夹中的所有照片:

001.JPG
002.JPG
003.JPG
...
Run Code Online (Sandbox Code Playgroud)

次要编号是旧图像,最大值是新图像。

我不太擅长脚本,所以我在寻求帮助。

我觉得一个bash脚本就够了,但是如果你觉得更舒服,你可以写一个python脚本。

我想过这样的事情:

$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
Run Code Online (Sandbox Code Playgroud)

但我不知道如何一次对所有文件执行此操作。

小智 34

刚刚在这里发现 jhead 可以为你做这一切!:)

jhead -autorot -nf%Y-%m-%d_%H-%M-%S *.jpg
Run Code Online (Sandbox Code Playgroud)

  • 是的!但是要小心那个特定的格式字符串,因为它会在同一秒内为两个文件提供相同的名称。`%i`(或`%03i`,特别是)将按照原始问题的要求给出一个序列号。将两者结合起来可能不是一个坏主意。 (7认同)
  • 只是为了回应 mattdm 的评论 - ''jhead'' 手册建议它将自动附加一个额外的数字或字母(1,2,3 或 a,b,c 等)到重复项(相同的时间戳)。 (2认同)
  • 根据您的 shell,您可能最好“引用”格式字符串 (2认同)

max*_*zig 10

您可以使用 for 循环(在 shell 中/在 shell 脚本中)为所有文件访问它:

for i in *.JPG; do
  j=`jhead "$i" | grep date | sed 's/^File date[^:]\+: \(.\+\)$/\1/'`.jpg
  echo mv -i "$i" "$j"
done
Run Code Online (Sandbox Code Playgroud)

这只是一个非常基本的大纲。echo确认一切正常后删除。