如何使用ImageMagick'格式化日期和时间;s识别效用?

如何使用ImageMagick'格式化日期和时间;s识别效用?,imagemagick,identify,Imagemagick,Identify,我正在创建一个bash脚本,用于重命名照片,以便在文件名中包含日期和时间。我想用ImageMagick的identify实用程序构建一个文件名 identify-格式为“IMG”[EXIF:DateTime].jpg“myphoto.jpg 我想对日期和时间应用格式。我怎样才能用ImageMagick做到这一点?标识支持格式化吗?您可以在Imagemagick中完成大部分工作。但是Imagemagick没有内置的日期时间格式。因此,您必须捕获日期和时间,并通过管道将其传输到您的操作系统以重新格式

我正在创建一个bash脚本,用于重命名照片,以便在文件名中包含日期和时间。我想用ImageMagick的
identify
实用程序构建一个文件名

identify-格式为“IMG”[EXIF:DateTime].jpg“myphoto.jpg


我想对日期和时间应用格式。我怎样才能用ImageMagick做到这一点?
标识
支持格式化吗?

您可以在Imagemagick中完成大部分工作。但是Imagemagick没有内置的日期时间格式。因此,您必须捕获日期和时间,并通过管道将其传输到您的操作系统以重新格式化。然后捕获不带后缀的图像名称。然后将输入转换为具有所需输出名称的新图像

下面是一个使用Unix tr重新格式化捕获的数据和时间的示例,其中我将空格更改为下划线,将冒号更改为连字符

datetime=$(identify -format "%[EXIF:DateTime]" P1050001.JPG | tr " " "_" | tr ":" "-")

inname=$(identify -format "%t" P1050001.JPG)

convert P1050001.JPG ${inname}_${datetime}.jpg

这将创建一个名为P1050001_2009-12-05_16-59-51.jpg的新文件

或者,您可以将前两个步骤组合为:

newname=$(identify -format "%t_%[EXIF:DateTime]" P1050001.JPG | tr " " "_" | tr ":" "-")

convert P1050001.JPG ${newname}.jpg

如果不想使用convert创建新图像,则可以使用操作系统重命名原始图像


正如Mark Setchell所建议的那样,使用exiftool可以更轻松地完成所有这些操作。

使用
日期
实用程序重新格式化日期值。运行
man date
,并检查其他示例

img\u date=$(标识-格式为“%t\u%[EXIF:DateTime]”input.jpeg)
#=> 2018:07:25 06:28:41
我的日期=$(日期-j-u-f“%Y:%m:%d%H:%m:%S”“$img\u日期”+%Y-%m-%d”)
#=> 2018-07-25
转换input.jpeg“输出${my_date}.jpeg”
#=>输出_2018-07-25.jpeg

exiftool可能会更好地为您服务。遗憾的是,答案似乎是您无法单独使用ImageMagick进行格式化。有多种选择。哇,
exiftool
是一个非常棒的工具。我以前看到过它的存在,但现在我看到它非常强大(尽管它的文档可能更好)。以下是我问题的解决方案(但不是我问题的答案):
exiftool“-FileName”如果您发现需要将“find”或“awk”与exiftool结合使用,那么您可能还没有发现exiftool的全部功能”-摘自。更多信息可在命令行示例中找到。