我正在创建一个重命名照片的bash脚本,以便它们在文件名中包含日期和时间。我想使用ImageMagick的identify
实用程序构建文件名。
identify -format "IMG_%[EXIF:DateTime].jpg" myphoto.jpg
我想将格式应用于日期和时间。我该如何使用ImageMagick? identify
是否支持格式化?
答案 0 :(得分:3)
您可以在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可以更轻松地完成所有这些操作。
答案 1 :(得分:3)
使用date
实用程序重新格式化日期值。运行man date
,并检出其他questions/answers作为示例。
img_date=$(identify -format "%t_%[EXIF:DateTime]" input.jpeg)
#=> 2018:07:25 06:28:41
my_date=$(date -j -u -f "%Y:%m:%d %H:%M:%S" "$img_date" +"%Y-%m-%d")
#=> 2018-07-25
convert input.jpeg "output_${my_date}.jpeg"
#=> output_2018-07-25.jpeg