Sad*_*adi 11 video photo-management nautilus-script batch-rename
我经常将照片和视频(主要有 JPG 和 MOV 扩展名)从数码相机和平板电脑导入我的 PC,我希望看到它们根据它们的 EXIF 数据中已经存在的日期和时间进行排序。因此,我希望最好使用简单的Nautilus 脚本重命名它们,最好在每个文件名之前插入日期和时间戳。
到目前为止,我只设法整合了以下 Nautilus 脚本,我认为它远非完美:
for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i""
done
Run Code Online (Sandbox Code Playgroud)
在这种重命名方法中,我不喜欢EXIF 日期和时间戳中使用的冒号(例如“2013:09:03 20:55:09_IMG_0108.JPG”),这在以后将这些文件传输到其他环境时可能会产生问题(例如Windows)。
此命令(使用exiv2而不是exiftool)可以方便地操作日期和时间戳,但其缺点是它不适用于视频(例如 MOV)文件:
exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"
Run Code Online (Sandbox Code Playgroud)
所以我希望有人能提出更好的解决方案。如果它甚至设法将原始文件名和扩展名也转换为小写,那就太神奇了!
小智 14
我需要重命名我的照片并在这里发现了这个问题——我刚刚发现exiftool
它是本地处理的:
来自http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html
exiftool -d %Y-%m-%d_%H-%M-%S%%-c.%%e "-filename<CreateDate" DIR
Run Code Online (Sandbox Code Playgroud)
如果要跟踪原始文件名并写入扩展名小写:
exiftool -d %Y%m%d_%H%M%S%%-c-%%f.%%le "-filename<DateTimeOriginal" [.|DIR]
Run Code Online (Sandbox Code Playgroud)
同样适用于小写的整个文件名:
exiftool -d %Y%m%d_%H%M%S%%-c-%%lf.%%le "-filename<DateTimeOriginal" [.|DIR]
Run Code Online (Sandbox Code Playgroud)
在这种重命名方法中,我不喜欢 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"
Run Code Online (Sandbox Code Playgroud)
至于使整个事情小写,你可以使用rename
:
rename 's/(.*)/\L$1/' file.JPG
## or
rename 's/(.*)/\L$1/' *.*
Run Code Online (Sandbox Code Playgroud)
或者你可以在你的脚本中使用sed
,如:
j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')
Run Code Online (Sandbox Code Playgroud)
...然后使用$j
变量来代替最终的$i
您的mv
线。由于不同的 linux 发行版具有不同的重命名命令,而 sed 是通用的,因此这种 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
Run Code Online (Sandbox Code Playgroud)
要对不同的文件类型执行稍微不同的命令,可以在此脚本中使用 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
Run Code Online (Sandbox Code Playgroud)
在此示例中,通过使用另一个 (-tur) EXIF 数据并删除该时差后缀来调整具有 CreateDate 时间戳 ANY NUMBER AFTER OR BEFORE JPG 文件的 MOV 文件的重命名,并且可能需要更改-tur部分根据系统中设置的位置。
归档时间: |
|
查看次数: |
12824 次 |
最近记录: |