在这种重命名方法中,我不喜欢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
变量来代替最终的$i
您的mv
线。sed的方式更具可移植性(如果对您而言很重要),因为不同的linux发行版具有不同的重命名命令,而sed是通用的。
或者,也可以按如下方式修改脚本,以使用以下命令将文件名转换为小写tr
:
for arg
do
tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
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 '[A-Z]' '[a-z]')"
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时间戳记为JPG文件之后或之前任何小时数的MOV文件,并删除该时差后缀,可能需要更改-tur part根据系统中设置的位置。