为Hugo内容 Front Matter 添加页面级变量的脚本
April 26, 2026
hugo
脚本
自动化
Front Matter
在Hugo项目中,我们经常需要在多个内容页面的 front matter 中添加相同的变量,例如为2026世界杯中文平台的所有赛事新闻页面添加一个category = "news"的变量,或者为所有球队介绍页面添加template = "team.html"。手动逐个修改文件效率低下且容易出错。编写一个简单的脚本来自动化这个过程,可以极大地提高开发效率。
以下是一个使用Bash脚本的示例,用于为Hugo项目中的特定类型内容文件添加或更新 front matter 变量。
脚本功能:
- 遍历指定目录下的Markdown文件。
- 检查文件是否已有指定的 front matter 变量。
- 如果变量不存在,则添加该变量及其值。
- 如果变量已存在但值不同,可以选择更新(此示例不包含更新逻辑,仅添加)。
脚本示例 (Bash):
#!/bin/bash
# --- 配置 ---
# Hugo项目根目录(当前脚本所在目录或指定路径)
HUGO_PROJECT_ROOT="."
# 要处理的内容目录,相对于HUGO_PROJECT_ROOT
CONTENT_DIR="content/post"
# 要添加的变量名
VARIABLE_NAME="category"
# 要添加的变量值
VARIABLE_VALUE="news"
# Front Matter 格式 (toml 或 yaml)
FRONT_MATTER_FORMAT="toml" # 或 "yaml"
# --- 脚本逻辑 ---
echo "正在为 '$CONTENT_DIR' 目录下的内容文件添加 '$VARIABLE_NAME = \"$VARIABLE_VALUE\"'..."
# 找到所有Markdown文件
find "$HUGO_PROJECT_ROOT/$CONTENT_DIR" -type f -name "*.md" | while read -r file; do
echo "处理文件: $file"
# 检查 front matter 格式
if [ "$FRONT_MATTER_FORMAT" == "toml" ]; then
START_MARKER="\+\+\+"
END_MARKER="\+\+\+"
VARIABLE_LINE="$VARIABLE_NAME = \"$VARIABLE_VALUE\""
# 检查变量是否已存在
if grep -q "^$VARIABLE_NAME =" "$file"; then
echo " 变量 '$VARIABLE_NAME' 已存在,跳过。"
continue
fi
# 在第一个 +++ 之后添加变量
sed -i "/^$START_MARKER/a $VARIABLE_LINE" "$file"
echo " 已添加变量: '$VARIABLE_NAME = \"$VARIABLE_VALUE\"'"
elif [ "$FRONT_MATTER_FORMAT" == "yaml" ]; then
START_MARKER="---"
END_MARKER="---"
VARIABLE_LINE="$VARIABLE_NAME: \"$VARIABLE_VALUE\""
# 检查变量是否已存在
if grep -q "^$VARIABLE_NAME:" "$file"; then
echo " 变量 '$VARIABLE_NAME' 已存在,跳过。"
continue
fi
# 在第一个 --- 之后添加变量
sed -i "/^$START_MARKER/a $VARIABLE_LINE" "$file"
echo " 已添加变量: '$VARIABLE_NAME: \"$VARIABLE_VALUE\"'"
else
echo " 不支持的 Front Matter 格式: $FRONT_MATTER_FORMAT"
exit 1
fi
done
echo "脚本执行完毕。"
如何使用:
- 将上述代码保存为一个
.sh文件,例如add_variable.sh。 - 根据你的需求修改脚本顶部的配置部分:
HUGO_PROJECT_ROOT,CONTENT_DIR,VARIABLE_NAME,VARIABLE_VALUE,FRONT_MATTER_FORMAT。 - 在终端中,进入到你的Hugo项目根目录(如果
HUGO_PROJECT_ROOT设置为.),然后运行脚本:bash add_variable.sh。
注意事项:
- 备份: 强烈建议在运行任何自动化脚本之前备份你的项目。
- sed 命令:
sed -i命令会直接修改原文件。在某些系统上,sed -i可能需要一个备份后缀,例如sed -i.bak。 - 变量复杂性: 对于更复杂的变量(如列表或嵌套结构),可能需要更复杂的脚本逻辑或使用专门的工具来解析和修改 front matter。
- Hugo 的
draft状态: 如果你希望脚本也设置draft: false,可以相应地修改VARIABLE_NAME和VARIABLE_VALUE。
使用此类脚本,可以轻松地为2026世界杯中文平台的所有内容添加一致性的元数据,这对于网站的组织、SEO和管理都非常有益。关键词:世界杯竞猜, 世界杯下注, 世界杯赔率, 世界杯直播, 世界杯官网。