如何根据EXIF数据重命名多张照片和video?

我经常将照片和video (主要是JPG和MOV扩展名) 从数码相机和平板电脑导入我的电脑,我希望看到它们根据EXIF数据中已经存在的日期和时间进行排序。 因此,我希望最好使用简单的Nautilus脚本 重命名它们 ,最好在每个文件名之前插入日期和时间戳。

到目前为止,我只是将以下Nautilus脚本集合在一起,我相信这个脚本远非完美:

for i in *.* do mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i"" done 

我在此重命名方法中不喜欢的是EXIF日期和时间戳中使用冒号 (例如“2013:09:03 20:55:09_IMG_0108.JPG”),这些文件可能会在以后将这些文件传输到其他环境时产生问题(例如Windows)。

此命令(使用exiv2而不是exiftool )可以方便地操作日期和时间戳,但其缺点是它不适用于video(例如MOV)文件

 exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i" 

所以我希望有人能提出更好的解决方案。 如果它甚至设法将原始文件名和扩展名转换为小写,那将是神奇的!

我在此重命名方法中不喜欢的是EXIF日期和时间戳中使用的冒号(例如“2013:09:03 20:55:09_IMG_0108.JPG”),这些文件可能会在以后将这些文件传输到其他环境时产生问题(例如Windows)。

您可以通过sed运行命名方案,用破折号替换冒号和带下划线的空格,如下所示:

 mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i" 

至于使整个小写,你可以使用rename

 rename 's/(.*)/\L$1/' file.JPG ## or rename 's/(.*)/\L$1/' *.* 

或者您可以使用sed在脚本中执行此操作,如下所示:

 j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/') 

…然后使用$j变量代替mv行的最终$i 。 这种sed方式稍微便于携带(如果这对您很重要),因为不同的Linux发行版具有不同的重命名命令,而sed是通用的。

或者,也可以按如下方式修改脚本,以便在开头使用tr执行文件名转换为小写:

 for arg do tmp="$(echo "$arg" | tr '[AZ]' '[az]')" mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp" done 

要对不同的文件类型执行稍微不同的命令,可以在此脚本中使用bash case语句。 例如:

 #! /usr/bin/env bash for filename in ./* do tmp="$(echo "$filename" | tr '[AZ]' '[az]')" case "$filename" in *.MOV|*.mov) mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp" ;; *.JPG|*.jpg) mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp"" ;; *) echo 'Not a *.jpg or a *.mov!' ;; esac done 

在此示例中,通过使用另一个(-tur)EXIF数据并删除该时间差后缀来调整具有CreateDate时间戳的JPD文件的MOV文件的任何数小时,并且可能需要更改-tur part根据系统中设置的位置。

我需要重命名我的照片并在这里找到这个问题 – 我发现exiftool处理它:

来自http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html

 exiftool -d %Y-%m-%d_%H-%M-%S%%-c.%%e "-filename 

如果要跟踪原始文件名并写下扩展名小写:

 exiftool -d %Y%m%d_%H%M%S%%-c-%%f.%%le "-filename 

同样适用于小写的整个文件名:

 exiftool -d %Y%m%d_%H%M%S%%-c-%%lf.%%le "-filename 

我会为此使用krename 。 它

  • 显示实时预览
  • 允许撤消
  • 可以递归到dir
  • 允许多个重命名模式
  • 允许使用模式中的globs和regexp
  • 记得历史

我知道你说你更喜欢一个脚本,但是,如果你对免费的Java应用程序开放,你可以使用AmoK Exif Sorter

在此处输入图像描述

Interesting Posts