我有一个运动摄像机,可以将我的视频保存在 SD 卡的文件夹中。 使用 linux,这里是路径:
/media/mattiapdo/EOS_DIGITAL/_REC/100MEDIA
文件保存为REC_0001.AVI
格式
我会编写一个脚本,使用写入日期重命名每个文件。
此外,我注意到由于某些奇怪的原因,日期和时间与有效时间不同:例如,12/07/2017 10:30
写为 09/02/2011 07:55
由于相机非常旧而且很小,我无法重新设置正确的日期和正确的时间,所以我宁愿在事后操纵它们。
目标是将 REC_0001.AVI 重命名为 2017_07_12__10_30.AVI
有没有人有什么想法?
最佳答案
您可以使用 date
命令打印自 Unix 术语,大纪元,又名 1970-01-01 UTC 以来经过的秒数。假设相机日期是 Anglo 格式,并且默认情况下 date
喜欢 Anglo 格式,您必须交换日期中的月份和日期
$ date --date='09/02/2011 07:55' +%s
1314942900
$ date --date='07/12/2017 10:30' +%s
1499848200
$
以便您可以计算实际日期和相机时间概念之间的Delta
$ Delta=$(($(date --date='07/12/2017 10:30' +%s)-$(date --date='02/09/2011 07:55' +%s)))
$ echo $Delta
184905300
$
你还没有(还?)告诉我们你是如何从相机中获取日期的,但让我们 这么说
$ camera=$(fetch_date $current_file_name)
并假设 $camera
是 date
喜欢的格式,
$ fromEpoch=$(($(date --date="$camera" +%s)+$Delta))
最后一步是以您喜欢的格式取回日期,我建议
ISO 8601 格式,以便您的文件按 ls
$ corrected_date=$(date --date="@$fromEpoch" +%Y-%m-%dT%H:%M)
$ cp $current_file_name other_directory/$corrected_date.AVI
关于 date
命令的无聊细节,确实非常灵活和有用,可以使用
$ man date
我希望你能用我给你的信息写你的脚本,谢谢你的提问。
附录
买者自负:完全未经测试
$ cat script
Delta=$(($(date --date='07/12/2017 10:30' +%s)-$(date --date='02/09/2011 07:55' +%s)))
mkdir -p ATTIC
mv *AVI ATTIC
for file in ./ATTIC/*.AVI ; do
########## fetch_date command is a placeholder for the real command
cam_date=$(fetch_date "$file")
cam_fromEpoch=$(date --date="$cam_date" +%s)
correct_fromEpoch=$(($cam_fromEpoch+$Delta))
ISO_8601=$(date --date="@$correct_fromEpoch" +%Y-%m-%dT%H:%M)
cp $file $ISO_8601.AVI
done
# cleanup, e.g. list current directory and ATTIC and ask if ATTIC is to be removed
$
关于linux - 如何制作脚本来重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45054764/