Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 3.72 KB

2021-04-05-从Simple迁移到Hugo.md

File metadata and controls

54 lines (38 loc) · 3.72 KB
title date lastmod draft toc tags
从Simple迁移到Hugo
2021-04-05 17:54:47 UTC
2021-06-10 17:54:47 UTC
false
true
hugo
Simple
迁移

初试Hugo

  Simple由于GitHub登录API变化而无法登录使用,已经过去1年多,我原本计划修复Simple的登陆方案的,后来实在是懒癌发作外加似乎需要服务器支持才能完成GitHub的新版登录API,索性弃坑重新寻找写博客的方法。恰好前两天看到了Keep Coding的博客,稍微了解了一下,觉得Hugo应该是比Hexo,或者说基于NodeJS的任意方案都要好一些,毕竟依赖会少不少,而且实在不行就用docker跑编译,总之是省了不少本地依赖的事情。

  通常来说,迁移博客最基础的,就是将文章迁移过来。Simple作为基于GitHub API的静态博客,它自己是没有数据库来存储文章的,而是将markdown作为注释放在正文里的。我们恰好可以借助这一特性,将相应的md文件提取出来:

cat fileName.html | awk '/<!-- markdown -->/,/<!-- markdown end -->/' > exports/fileName.md

  怎么遍历文件名就不赘述了,bash脚本跑循环就好。

  不过这样导出的文件里还有markdown的注解,可以使用如下命令来清除:

sed -i "s/<!-- markdown -->//g" *.md
sed -i "s/<!-- markdown end -->//g" *.md

  那么当我之前的博客都备份好了,怎么导入到Hugo里呢?

  先不说Hugo的站点结构如何,这个问题各位观众那都可以慢慢调整;最重要的是Hugo的md文件是有格式的,你得遵照一定的格式导入,也就是每篇文章开头的元数据,至少包含title,date。此外我希望导入以后,网页的URL还能按照原先的URL存在,避免死链.那怎么办呢?

  原来Simple有一个main.json是专门存储元数据的,我们可以从它解析到相应的参数,填入目标文档。经过一番探究,我写了如下的脚本生成相应的目标文档:

echo "---" >hugo/content/imported/$filename.md && \
echo "title: \"$(jq -r '.posts|map(select(.path == "'$filename'.html").title)[0]' main.json)\"" >> hugo/content/imported/$filename.md && \
echo "date: \"$(jq -r '.posts|map(select(.path == "'$filename'.html").date)[0]' main.json)T00:00:00Z\"" >> hugo/content/imported/$filename.md && \
echo "draft: false" >> hugo/content/imported/$filename.md && \
echo "tags: [\"$(jq -r '.posts|map(select(.path == "'$filename'.html").tags)[0]|split(" ")|join("\",\"")' main.json)\"]" >> hugo/content/imported/$filename.md && \
echo "url: $filename.html" >> hugo/content/imported/$filename.md && \
echo "---" >> hugo/content/imported/$filename.md && cat exports/$filename.md >> hugo/content/imported/$filename.md

  通过上述脚本指定的url, 我们导入的文章url仍然在根目录下,不会受到影响,这样的url就跟原来的simple的url一致,保证迁移后搜索引擎的链接仍然有效。

使用Even

  据我观察, Hugo 使用 Even 主题的博客很多,简单了解了一下,这个主题已经比较完善了.但是我刚刚开始使用它,咦,目录空了,囧. 谷歌一下,发现它必须使用post目录,而不是默认的posts目录,更不支持imported目录了.最简单的办法就是把imported目录放到post目录下,以后新建的文章就放到post目录下就好啦.

  但是随后就发现生成的rss文章包括了关于我这样的页面,这个问题还是比较严重的.不过默认hugo生成的rss是包含区域rss的,因此直接使用post/rss.xml就可以只生成post目录下的rss文件了.

解决tags和archive空白问题

  不知道为什么,当我点击tags和archive目录的时候,前者是404,后者是空白页.既然