我有一个actioncam,可将我的视频保存在SD卡中。 使用linux,这是路径:
/media/mattiapdo/EOS_DIGITAL/_REC/100MEDIA
文件以REC_0001.AVI
格式保存
我会编写一个脚本,使用写日期重命名每个文件。
此外,我注意到由于某些奇怪的原因,日期和小时与有效不同:例如,12/07/2017 10:30
被写为09/02/2011 07:55
由于相机非常陈旧且极小,我无法重置正确的日期和正确的小时,因此我宁愿在善后处理它们。
目标是重命名REC_0001.AVI in 2017_07_12__10_30.AVI
有没有人有任何想法?
答案 0 :(得分:0)
您可以使用date
命令打印自Unix Unix术语,即Epoch,又名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
$