如何制作脚本来重命名文件

时间:2017-07-12 10:11:34

标签: linux bash

我有一个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

有没有人有任何想法?

1 个答案:

答案 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
$