旁注

用 exiftool 按拍摄时间整理照片

技术约 300 字

手机、相机、家里人转过来的照片混在一个文件夹里,文件名五花八门:IMG_ 开头的、DSC_ 开头的、聊天软件导出的一串数字。想统一成按拍摄时间命名,这样排序自然就对了。

基本用法

exiftool '-FileName<DateTimeOriginal' \
  -d '%Y%m%d_%H%M%S%%-c.%%le' \
  -r ./photos
  • -d 设定日期格式;%%-c 在重名时自动加 -1、-2,连拍的照片不会互相覆盖。
  • %%le 是小写的原扩展名,.JPG 和 .jpg 顺便统一了。
  • -r 递归处理子目录。

上面这条会直接改名。稳妥的做法是先把 FileName 换成 TestName 跑一遍,只打印结果,不动文件:

exiftool '-TestName<DateTimeOriginal' -d '%Y%m%d_%H%M%S%%-c.%%le' -r ./photos

没有拍摄时间的文件

截图和转存的图常常没有 DateTimeOriginal。exiftool 的规则是后面的赋值覆盖前面的,所以兜底的写在前面:

exiftool '-FileName<FileModifyDate' '-FileName<CreateDate' \
  '-FileName<DateTimeOriginal' \
  -d '%Y%m%d_%H%M%S%%-c.%%le' -r ./photos

有拍摄时间就用拍摄时间,没有就退到创建时间,再没有就用文件修改时间。最后一种不太可靠,跑完我会把这类文件挑出来人工看一眼。

顺手按月份分目录

exiftool '-Directory<DateTimeOriginal' -d './sorted/%Y/%m' -r ./photos

改名和分目录可以合成一条命令,不过我更喜欢分两步做,每一步都能单独检查。

macOS 上用 Homebrew 装一下就有。动手之前先把整个文件夹完整备份一份,这一条比上面所有命令都重要。