Hugo:给文章添加 lastmod(上次修改时间)
叶寻
背景:本站文章的 lastmod(上次修改时间)就是 Git 提交的 author date(作者日期)。我需要批量修改文章(Hugo:补全文章的 ISO 8601 日期),这会导致所有文章的 lastmod 都变成今天。文章内容没变就不应该改 lastmod,所以我打算给每篇文章都加上 lastmod,后面改动文章就 lastmod 就不会变。
先把 lastmod 的优先级调至最高,不然 Hugo 会继续使用 Git 提交日期。
1
2
3
  | # config.toml
[frontmatter]
  lastmod = ['lastmod', ':default']
  | 
在根目录新建 add-lastmod.sh,添加执行权限
1
2
  | touch add-lastmod.sh
chmod +x add-lastmod.sh
  | 
往 add-lastmod.sh 填入脚本内容。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
  | #!/usr/bin/env bash
# usage: ./add-lastmod.sh directory-name
directory="$1"
files=$(find "$directory" -type f)
for file in $files; do
  echo "${file}"
  lastmod_date=$(git log --no-show-signature -1 --format=%aI "$file") # example: 2024-05-16T14:23:53+08:00
  echo "$lastmod_date"
  # Use awk to insert the lastmod line above the second ---
  awk -v lastmod="lastmod: $lastmod_date # remove this line if the content is actually changed" '
  BEGIN { frontmatter = 0 }
  /^---$/ { frontmatter++ }
  frontmatter == 2 && !printed { print lastmod; printed = 1 }
  { print }
  ' "$file" >tmpfile && mv tmpfile "$file"
done
  | 
修改前先构建网站,后面用于对比。
1
2
3
  | rm --recursive public/
hugo
mv public public-original
  | 
添加 lastmod。
1
  | ./add-lastmod.sh content
  | 
再次构建网站。
1
2
  | hugo
mv public public-changed
  | 
使用文件对比工具(我用的是 Kompare)对比 public-original 和 public-changed,结果完全相同。
预览,稍微和 https://cyrusyip.org/ 对比一下,看起来一样。
删除构建的网站。
1
  | rm --recursive public public-original public-changed
  | 
查看差异后提交改动。
1
2
3
  | git diff
git add --update
git commit --message 'chore: add lastmod before changing date'
  | 
删除脚本。
giscus 评论。如果评论未加载,giscus 可能被你的互联网服务提供商屏蔽。
Disqus 评论。如果评论未加载,Disqus 可能被你的互联网服务提供商屏蔽。