Tom*_*man 3 metadata image-processing batch-rename exiftool
我正在使用pyrenamer我的照片集,除了一个问题外,它效果很好。我希望它按拍摄日期元数据重命名照片,并在末尾加上三位数。我库中的每个文件夹代表一天,我希望照片以 001-999 的数字结尾,每个文件夹从 001 开始。示例文件名是 2016-01-31-001.jpg。
Shotwell%Y/%m/%d使用选项中的结构在导入时处理创建目录结构,但是当我在 ~/Pictures 目录中递归使用 pyrenamer 时,我没有看到预期的结果。它按日期重命名,但继续跨文件夹递增,而不是每个新文件夹从 001 开始。有没有更简单的方法来解决这个问题?
我知道我可以添加更多元数据变量并根据小时、分钟和秒重命名,但这会提供比我想要的更长的文件名。我的相机每秒也可以拍摄多张照片,因此重命名有问题。
请问最简单的方法是什么?我喜欢使用 pyrenamer,但 bash 脚本也很好。
Pictures/
??? Folder 1/
? ??? YY-MM-DD-001.jpg
? ??? YY-MM-DD-002.jpg
??? Folder 2/
? ??? YY-MM-DD-003.jpg
? ??? YY-MM-DD-004.jpg
...
Run Code Online (Sandbox Code Playgroud)
Pictures/
??? Folder 1/
? ??? YY-MM-DD-001.jpg
? ??? YY-MM-DD-002.jpg
??? Folder 2/
? ??? YY-MM-DD-001.jpg
? ??? YY-MM-DD-002.jpg
...
Run Code Online (Sandbox Code Playgroud)
要将整个 JPEG 照片图像库重命名为YYYY-MM-DD-XXX.jpg格式,每天从 -001 开始计数,请使用以下命令exiftool:
exiftool -fileOrder DateTimeOriginal -recurse -extension jpg -extension jpeg -ignoreMinorErrors '-FileName<CreateDate' -d %Y-%m-%d%%-.3nc.%%e ~/Pictures/
Run Code Online (Sandbox Code Playgroud)
为了完整解释该命令,以下是它的工作原理。
exiftool 启动脚本。-fileOrder DateTimeOriginal强制 exiftool 以相同的顺序处理图像。这对于按原始时间顺序保留一天内的图像编号至关重要。-recurse 递归处理子目录,这在您使用 Shotwell 导入时很有帮助,因为照片放置在按日期组织的目录中。-extension jpg -extension jpeg将确保只处理 JPEG 文件。(请注意,这些不是特定于案例的并且 jpg=JPG 所以我们抓住了一切)-ignoreMinorErrors 忽略不影响我们想要的结果的任何错误(通常是读取此操作不需要的无关标签的问题)。'-FileName<CreateDate' 将照片创建日期放在文件名中。-d %Y-%m-%d%%-.3nc.%%e此处-d设置所需的输出日期格式。我们将使用带连字符的四位数年份,然后是两位数的月份和日期 ( %Y-%m-%d),然后是一个以 001 ( %%-.3nc)开头的三位数字,并保留原始文件扩展名 ( .%%e)。~/Pictures/是最后一项,它只是exiftool应该用命令处理的目录。关于错误的说明,有-ignoreMinorErrors帮助,但您仍然可能会看到消息“警告:错误的 PreviewIFD 目录”,可以安全地忽略或“警告:没有从 /path/to/problem/image.jpg 设置可写标签”。第二个我无法解决,但我只看到了几张图片,所以我在 Nautilus 中手动重命名它们作为解决方法。
这个命令仍然可以改进,但它已经过测试并在一个大的(40GB,13000 张图像)照片库上工作,它很快并且不会产生错误,只是无法重命名缺少大多数现代相机都会创建的标签的偶尔图像.