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

标签 linux bash

我有一个运动摄像机,可以将我的视频保存在 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)

并假设 $cameradate 喜欢的格式,

$ 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/

相关文章:

linux - scp 后 C++ 可执行文件无法链接到共享库

bash - 使用 sed 在捕获组内替换

linux - 在 Linux 中查找进程的内存使用情况

bash - 尝试通过 docker exec 获取 bash,但没有任何效果(Jaeger 容器)--> OCI 运行时执行失败

linux - "Read"每行跳过最后一个字

linux - Bash shell `if` 命令返回一些东西 `then` 做一些事情

使用循环 shell 命令行调用 popen() 管道流

Linux:递增

java - 在linux上安装openjms

使用 GDB 远程调试器时,linux 系统调用永远不会返回