按 EXIF 信息中的日期对图像进行排序和重命名

按 EXIF 信息中的日期对图像进行排序和重命名

我的照片文件夹很乱;我想根据 EXIF 信息中的日期对它们进行排序,并根据日期重命名(如 001.jpg、002.jpg 等)。

我如何在 Linux 中执行此操作?我之前曾使用 ImageMagick 执行过一些基本的批量处理任务(转换和调整大小等),是否可以使用它执行此任务?

答案1

您可以使用外置工具。由于某种原因,在线手册不包含为我提供重要提示的“重命名示例”部分。

对于仅适用于 JPG 文件,以下命令调用应该可以完成该工作:

exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>

解释:

  • -r用于递归
  • '-FileName<CreateDate'告诉 exiftool 根据其 EXIF 标签重命名文件CreateDate(你可以尝试其他类似的ModifyDate
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le'告诉如何从数据源“ CreateDate”构建文件名字符串(“ %-c”将在文件冲突的情况下附加计数器,“ %le”代表“小写文件扩展名”)
  • 笔记:我-FileName<...在这里使用“ ”重命名文件并将其移动到另一个文件夹,只需一步。手册指出,您必须使用“ -Directory<...”语法进行文件夹操作。但对我来说,这种方法很有效。

你应该花点时间阅读这个强大工具的手册。也许还有更短的方法:D

答案2

尝试一下这个免费产品:AmoK Exif 分类器

答案3

最简单的方法是将文件导入 jbrout ... 然后(可选)所有文件的名称都可以更改为与时间相关的名称。或者您可能会发现,您根本不需要更改名称(jbrout 就足够了)。

答案4

为了使其在 Debian Lenny 中运行,请尝试以下操作:

import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
    image = pyexiv2.Image(sys.argv[1]+'/'+fname) 
    #metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
    #metadata.read()
    image.readMetadata() 
    tag = image['Exif.Image.DateTime']
    timestamp = int(time.mktime(tag.timetuple()))
    #print fname, ' ', tag.value, ' ', timestamp
    try:
    dic[timestamp] = fname
    except:
    print fname, ' not processed.'

keys = dic.keys()
keys.sort()
i = 0 
for k in keys:
    os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
    i+=1

相关内容