Bash 脚本:基于日期数组批量生成 HTML 视频索引页

雨丽小哥_1288

雨丽小哥_1288

2026-09-03

658人浏览

原创

Bash 脚本:基于日期数组批量生成 HTML 视频索引页

本文详解如何用 Bash 脚本解析视频文件名(格式为 yyyy-mm-dd-hh-mm-ss.mp4),按日期分组生成每日独立 HTML 页面,并构建带视频数量统计的首页,同时修复因误用命令替换导致的 command not found 错误。

本文详解如何用 bash 脚本解析视频文件名(格式为 `yyyy-mm-dd-hh-mm-ss.mp4`),按日期分组生成每日独立 html 页面,并构建带视频数量统计的首页,同时修复因误用命令替换导致的 `command not found` 错误。

在嵌入式环境(如树莓派 + lighttpd)中自动化管理监控视频时,轻量、无依赖的 Bash 脚本是理想选择。核心需求有二:

  1. 按日聚合:将形如 2024-04-01-14-22-05.mp4 的文件按 yyyy-mm-dd 归类;
  2. 双层页面生成:
      ✅ index.html:列出所有日期及当日视频总数(如 01/04/2024 - 10 videos);
      ✅ 2024-04-01.html:展示该日全部视频缩略图、时间戳、下载链接等。

你原脚本的关键错误出现在输出重定向行:

" > "$("${day}.html")"  # ❌ 错误:$() 是命令替换,不是变量扩展!

当 day=2024-04-01 时,此行实际执行 $(2024-04-01.html) —— Shell 试图运行一个名为 2024-04-01.html 的命令,自然报错 command not found。正确写法应为直接变量扩展:

" > "${day}.html"  # ✅ 正确:${day} 展开为字符串,.html 拼接为文件名

此外,原逻辑存在几个关键优化点,以下是完整、健壮、可直接部署的改进版核心流程:

html-deploy
html-deploy

使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。

下载

✅ 步骤一:安全提取日期并去重

# 清空临时数组
dates=()
videos_by_date=()

# 遍历视频(仅处理 .mp4/.avi 等常见格式)
for video in "$videos_dir"/*.mp4 "$videos_dir"/*.avi; do
    [[ ! -f "$video" ]] && continue  # 跳过无匹配文件的通配符
    basename=$(basename "$video")
    # 提取 yyyy-mm-dd(前10字符),忽略后缀和时间部分
    date_part=${basename:0:10}
    if [[ $date_part =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
        dates+=("$date_part")
        videos_by_date+=("$date_part|$video|$thumbs_dir/${basename%.*}.jpg")
    fi
done

# 获取唯一日期列表(保持顺序)
readarray -t unique_dates <h3>✅ 步骤二:为每个日期生成专属 HTML 页</h3><pre class="brush:php;toolbar:false;">for day in "${unique_dates[@]}"; do
    # 过滤出该日所有视频项(支持多视频同日)
    day_items=()
    for item in "${videos_by_date[@]}"; do
        IFS='|' read -r d v t  "${day}.html" 

<title>Video Archive — $day</title><h2>$day (${#day_items[@]} videos)</h2>
<div style="display:grid; grid-template-columns:repeat(auto-fill, minmax(300px,1fr)))); gap:1rem;">
$(for item in "${day_items[@]}"; do
    IFS='|' read -r video thumb 
      @@##@@
      <p><strong>$base</strong></p>
      <a href="%24video" download>⬇ Download</a>
    </div>"
  done)



EOF
done

✅ 步骤三:生成首页 index.html(含日期跳转与计数)

# 构建首页导航列表
index_links=""
for day in "${unique_dates[@]}"; do
    count=$(grep -c "^$day|" /dev/null || echo "$day")
    index_links+="
  • $formatted — $count videos
  • " done cat > index.html Video Archive Index

    ? Video Archive

      $index_links

    Generated on $(date)

    EOF

    ⚠️ 注意事项与最佳实践

    • Shell 兼容性:使用 #!/bin/bash 替代 #!/bin/sh,因 readarray 和 [[ 等特性在 POSIX sh 中不可用;
    • 路径安全:始终用 "$var" 引用变量,避免空格或特殊字符导致路径断裂;
    • ffmpeg 缩略图:建议添加 -ss 00:00:03 跳转到第3秒再截图,避开黑帧;
    • 性能优化:对数千文件,改用 find ... -printf + awk 替代循环,但当前方案对树莓派已足够轻量;
    • cron 部署示例:
      # 每日凌晨 4:30 执行(确保录像已停止)
      30 4 * * * /home/pi/video-indexer/generate.sh >> /var/log/video-index.log 2>&1

    通过以上重构,脚本不再触发命令替换错误,逻辑清晰、容错性强,且完全满足低资源设备的静态站点生成需求。最终产物是零 JS 依赖的纯 HTML 站点,可直接由 lighttpd 托管,访问高效稳定。

    $base

    前端入门到VUE实战笔记:立即使用
    在学习笔记中,你将探索 前端 的入门与实战技巧!

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    html

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    html版权符号
    html版权符号

    html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    2023.06.14

    5435

    7

    html在线编辑器
    html在线编辑器

    html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

    2023.06.21

    3132

    4

    html网页制作
    html网页制作

    html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.07.31

    2790

    5

    html空格
    html空格

    html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.01

    2819

    5

    html是什么
    html是什么

    HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

    2023.08.11

    4699

    6

    html字体大小怎么设置
    html字体大小怎么设置

    在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

    2023.08.11

    2761

    3

    html转txt
    html转txt

    html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.31

    2549

    3

    html文本框代码怎么写
    html文本框代码怎么写

    html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

    2023.09.01

    2308

    6

    HTML嵌入CSS样式的方法
    HTML嵌入CSS样式的方法

    HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

    2023.09.20

    2308

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    GDB 17.2 官方文档集合
    GDB 17.2 官方文档集合

    共0课时 | 0人学习

    Bootstrap 入门安装配置
    Bootstrap 入门安装配置

    共0课时 | 0人学习

    38+ PhpStorm 提示和技巧
    38+ PhpStorm 提示和技巧

    共1课时 | 219人学习