如何根据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