![如何将 JPEG 文件批量重命名为图像日期,并添加每天重置的计数?](https://linux22.com/image/1134183/%E5%A6%82%E4%BD%95%E5%B0%86%20JPEG%20%E6%96%87%E4%BB%B6%E6%89%B9%E9%87%8F%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA%E5%9B%BE%E5%83%8F%E6%97%A5%E6%9C%9F%EF%BC%8C%E5%B9%B6%E6%B7%BB%E5%8A%A0%E6%AF%8F%E5%A4%A9%E9%87%8D%E7%BD%AE%E7%9A%84%E8%AE%A1%E6%95%B0%EF%BC%9F.png)
我正在使用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
...
期望输出:
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
...
答案1
要将整个 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/
为了完整解释该命令,下面介绍其工作原理。
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 张图像)照片库上测试并运行,速度很快且不会产生错误,只是无法重命名偶尔缺少大多数现代相机都会创建的标签的图像。