使用exif重命名照片的脚本

时间:2014-11-17 23:14:33

标签: bash scripting rename photo exif

我有一个问题。我想写一个bash脚本来重命名不同文件夹中的照片。 你有什么建议吗?

输入是:

  • DSC3201.jpg
  • DSC3202.jpg
  • DSC3202-1.jpg
  • ECC

我想要的输出是:

  • 20141102_123259.jpg
  • 20141102_124502.jpg
  • 20141102_124502(1).JPG
  • ECC

输出格式为:yearmounthday_hourminuteseconds.ext,当修改了照片时(我在名称的最后部分放了-1)我想要一个增量数字(1)或(2)ecc ...

抱歉我的英语不好,但我希望你理解我的问题。非常感谢你:))

编辑:感谢您的回复!!我这样做了:

#!/bin/bash

declare dir_photo=$(ls $PWR | grep .jpg)

for N in $dir_photo do exiftool -d %Y%m%d_%H%M%S $N | awk -F': ' '/File Modification Date/{print $2}'  done

但是,如果我想要创作时间而不是修改时间,我必须改变什么?

编辑2:抱歉,脚本像魅力一样运行!非常感谢!!!

2 个答案:

答案 0 :(得分:1)

使用您的格式获取日期的解决方案:

$ exiftool -d %Y%m%d_%H%M%S image.png |
    awk -F': ' '/File Modification Date/{print $2}'

输出:

20140429_110955

开始编写脚本!

#!/bin/bash

dir_photo=(*.jpg)

for N in ${dir_photo[@]};  do
    date_str=$(
        exiftool -d %Y%m%d_%H%M%S $N |
        awk -F': ' '/File Modification Date/{print $2}'
    )
    print "$N $date_str"
done

答案 1 :(得分:0)

谢谢大家。 对“后代意志”:D 我知道有两种方法可以解决这个问题:

使用exiftool:

#!/bin/bash

dir_photo=(*.jpg)

for N in ${dir_photo[@]};  do
    date_str=$(
        exiftool -d %Y%m%d_%H%M%S $N |
        awk -F': ' '/File Modification Date/{print $2}'
    )
    print "$N $date_str"
done

或者使用jhead:

jhead -n%Y%m%d_%H%M%S *.jpg

选择您喜欢的内容;)