脚本_vnote格式md转hexo格式

动机,原有md希望快捷发布

本来原来有笔记,已经为md格式,希望批量发布。而不是一个个hexo new page xxx,然后复制过去,太慢了,而且每次修改都需要手工在相应hexo里面的md在修改一次。
但是,由于vnote笔记格式和hexo所需要的md格式并不完全相同,所以需要开发脚本将vnote的md内部格式修改为和hexo内部md格式一致。
hexo的标准POST格式除了有正文md,还多了头部的如下格式信息

1
2
3
title: 笔记工具比较
date: 2019-11-30 13:21:23
tags:

对于已有笔记
需:hexo new post xxx生成md模板 => 正文merge模板 => 发布,繁琐!!
这里使用脚本批量增加前缀,生成的md直接copy到hexo中即可。

脚本1,修改md文章标题和路径一致

比如:”小王的日记.md“
里面的第一行(也就是标题)是,”# 小王的日记本:“
文件路径和文章标题不一致,在hexo上会导致列表页标题和正文网页标题不一致的奇怪现象。而且,个人认为这不是个好习惯。拿可乐瓶子装雪碧,虽都能喝,但总是别扭的。

1
2
3
sed -i '1d' *.md        #删除首行内容(如果之前md文件没有标题,则不执行这一步)
sed -i '1i\# ' *.md #新增首行内容(# (和一个空格))
for f in *.md ;do sed -i "1 s/$/${f%.*}/" $f ;done;#将文件名追加到首行的# 后面(就是md的标题)

执行后就保证md的文件名和内部标题名一致。

脚本2,添加hexo的post模板前缀信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
需要添加的前缀,行首的01,02是为了方便标识添加的。实际不存在。
01 ---
02 title: 笔记工具比较
03 date: 2019-11-30 13:21:23
04 tags:
05 ---

脚本内容;
sed -i '1i\---' *.md #对应05的---
sed -i '1i\tags:' *.md #对应04
sed -i '1i\date: 2019-11-30 00:00:01' *.md #对应03
sed -i '1i\title: ' *.md #对应02的前半个
for f in *.md ;do sed -i "1 s/$/${f%.*}/" $f ;done;# 对应02的后半个,文件名部分
sed -i '1i\---' *.md #对应01

综上最终脚本:在终端中批量执行(ctrl-v)即可。一次可以处理一个文件夹下的所有*.md文件。

脚本3,vnote的md格式转hexo格式(icarus主题适用)(github)

脚本地址github:https://github.com/yuanjh6/scripts

将vnote的md格式转为hexo的md格式
vnote原始文件:
路径:xxx/vnote/生活/日记20200328.md
内容:

1
2
3
4
5
# 天气晴,32度,心情好
## 张三给我拳头
xxxxyyyyzzz
## 我打李四一巴掌
fffzzkkk

执行:python md2hexo.py xxx/vnote/生活/日记20200328.md
这里转换后会在新md添加title信息

1
2
3
4
5
title:日记20200328(注意:title其实是文件名)
date: 2020-03-01 16:18:26
categories: ['xxx','vnote','生活'](注意:这里即使就是文件的路径,切分)
tags: ['']
toc: true

正文部分:

1
2
3
4
## 张三给我拳头  
xxxxyyyyzzz
## 我打李四一巴掌
fffzzkkk

主意正文部分的title没了,原因是本人采用icarus模板,此模板也认可头部的title:xxxx这里作为标题,如果下面还有标题,显示时就是双标题,导致格式错乱
如果你采用Next模板,则不同,需稍微改下代码,保持正文首行的标题
使用方法1,用于文件:python md2hexo.py xxxx/yyy.md
使用方法2,用于目录:python md2hexo.py xxxx/yyyy/zzz/
使用方法3,用于文件和目录且多个:python md2hexo.py xxxx/yyy.md xxxx/yyyy/zzz/ xxxx/yyyy/fff/

特殊说明:
01,文章的categories其实是文件路径切分,所以执行脚本前,md2hexo.py文件位置最好和md文件或者文件夹同级位置
比如:脚本位置:/xxx/yyy/zzz/md2hexo.py
你的md文件位置:/fff/mmm/kkk/vnote/生活/日记20200328.md
此时如果你在路径:/xxx/yyy/zzz/下执行脚本,python md2hexo.py /fff/mmm/kkk/vnote/生活/日记20200328.md
这样的话md文件的categories,是,fff,mmm,kkk,vnote,生活,但大多数情况,fff,mmm,可能是没用的,比如home/username/等无意义的
所以建议,将md2hexo.py放到/fff/mmm/kkk/vnote/下面,在/fff/mmm/kkk/vnote/下执行:python md2hexo.py 生活/日记20200328.md
如此的化,生成的文章的categories则为[‘生活’],基本符合本意
如下命令是:
1,md2hexo.py复制到md所在文件夹 /home/john/文档/vnote_notebooks/vnote/
2,在md所在文件夹外执行python md2hexo.py $(ls -I vrecycle_bin)
3,删除第1步复制过来的md2hexo.py脚本文件
建议使用前,单个步骤执行下,看下各个命令都什么效果,避免错了,还要在修改.md文件

1
conda activate py35 && cd /home/john/文档/vnote_notebooks/vnote/ && python md2hexo.py $(ls -I _v_recycle_bin)

02,阅读代码可以发现,对于文章标题(也即是文件名)如果含有[密],则自动增加字段password: xxxxyyyy ,为了实现对文章添加密码,没有密码无法访问(需要hexo插件配合)

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×