linux - 根据时间计算的文件名处理文件

标签 linux bash awk filesystems raspberry-pi

我有一台远程 Linux 计算机,一个树莓派,它每分钟拍摄两张照片并将它们上传到 Linux 服务器。照片的名称是这样的:SITE-03-22-16-091543.jpeg。文件名的格式如下:Sitename-month-day-year-hourminutesecond.jepg。在发送照片之前,通过 scp,我使用 exiv2 将一些本地天气日期嵌入到每张照片中。这样,天气状况就会存储在每张照片中。所有这些都工作正常。我希望其中大约 15 个都每分钟向服务器发回两个快照。

在服务器端,这些照片存储在它们自己的 SITE 文件夹中。这个想法是从每个站点制作延时视频。我们感兴趣的延时有四种类型:

1) 24 小时循环,从中午 12:00 到晚上 11:59。

2) 日出循环,从日出前 30 分钟到日出后 2 小时

3) 日落循环,从日落前 2 小时到日落后 30 分钟

4) 日光循环,从日出前 30 分钟到日落后 30 分钟

24 小时循环很简单。

日出和日落循环有点棘手。我从 SourceForge 上的 Ian Craig (https://sourceforge.net/projects/sunwait4windows/) 下载并编译了“sunwait”程序。使用命令“sunwait list rise 35.1174N 89.9711W | gawk -F: '{ print $1$2 }'” 产生输出 0700, sun rise at my location。并使用“设置”选项,在我的位置生成 1913,日落。因为我不住在赤道,所以日出和日落时间从早上 5:30 到早上 7:30。视季节而定。当然。

我有代码可以将图像列表编译到移动中,添加叠加层,并添加嵌入式天气数据。问题是如何创建日出前 30 分钟 + 2 小时照片的列表。然后是日落前 2 小时 + 30 分钟后。最后,从日出前 30 分钟一直到日落 + 30 分钟。

我确定答案是数学!有人可以在黄砖路上启动我吗?

最佳答案

awk 助您一臂之力!

在此处通过回显替换您的脚本以生成时间

$ echo 07:10 | 
  awk -F: -v offset=30 -v path="$filepath" '{
                         h=$1-int(offset/60);
                         m=$2-offset%60;
                         if(m<0) {m=m+60; h--}
                         for(i=0;i<=150;i++)
                           {m++;
                            if(m>59) {m=m%60; h++};
                            printf path"%02d%02d.jpeg\n",h,m}}'

创建一个 151 步的计数器,从给定小时分钟的偏移量(以分钟为单位)开始。对于另一种情况,将偏移量输入为 120。假设开始/结束时间不会更改日期。在北极附近可能不是真的!

我认为一些变量可以简化,但可以作为进一步改进的工作基础。

更新:int() 缺失,已修复,您也可以将路径作为另一个变量传递

关于linux - 根据时间计算的文件名处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225250/

相关文章:

java - 连接被拒绝,如何解决?

linux - 将特定子目录(及其中的所有文件)移动到另一个路径

python - 在 fedora 23 上安装 pip install psycopg2 时出错

java - 如何获取当前TAI时间?

linux - 将 IP 地址传递给 cloud-init 元数据

linux - 如何监控长时间运行的命令的进度?

Bash 有等待忽略信号

perl - Perl 中与 awk 中的/text/,/END/等价的是什么?

unix - awk 脚本在 SunOS 中无法正常工作(在 Red Hat 中运行良好)

linux - Unix AWK 命令 - 多个字符作为单个分隔符