为了一个主题, 我把我的博客框架从Hugo迁移到了Hexo, 但我喜欢的这个主题偏偏不支持Hugo, 我又懒得去折腾移植主题, 故迁之. 但在我使用Hexo的过程中发现了一些不方便的地方, 最想去改变的一个就是本地markdown源文件的管理.

Hexo存在的一个问题

在Hexo中, 你写的markdown博客会存储在your_blog_root_path/source/_posts下, 这样就存在一个问题, 当你的博客越写越多时, 所有的博客都在这个目录下, 就会导致当你想去修改或去找某一篇文章时, 发现会很难找到它. 这个问题困扰了我一段时间, 后来觉得如果能把source/_posts下所有的文章按照年/月/标题来划分来管理会方便很多, 最终效果如下:

但这样也有不方便的地方:

  1. 需要根据当前日期手动的去创建年/月目录
  2. 每次通过hexo publish命令发布文章后, 此文章默认还是会被移动到source/_posts根目录下, 需要再手动去移动对应博客到指定目录下

如果上面所有这些问题可以自动化来完成就太好了, 为此我去学了学shell脚本编程并总结了一篇博客Shell脚本编程总结及速查手册, 最终也完成了一个脚本解决了上面这些问题. 下面具体说一下如何实现的.

解决方案

实现思路:在hexo中是通过hexo publish命令来发布一篇draftsource/_posts目录下, 那么我们就可以通过一个shell脚本来完成整个过程, 此脚本我命名为pbblog, 首先, 需要根据当前日期, 确定输出目录(比如2016/06), 在这之前要先判断source/_posts目录下是否存在这个目录只有在不存在的情况下才去创建, 然后再把source/_drafts目录下的文章移动到source/_posts/对应的目录下即可, 最后, 再在此markdown文件下的title: xxx这一行下插入一行日期即可.脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#! /bin/sh

# 确定输出目录, year/month, 根据本地时间确定
if [ $# -ne 1 ]; then
echo "please input the draft name you want to publish !"
exit 1
fi

POST="$1"
ROOT_PATH="$HOME/ghui.me/source/_posts"
FULL_PATH="$ROOT_PATH/`date +%Y/%m`"
echo "path: $FULL_PATH"

# check path
if [ ! -d $FULL_PATH ]; then
echo "$FULL_PATH doesn't exit , auto created!"
mkdir -p $FULL_PATH
fi

# publish draft
SOURCE_PATH="$HOME/ghui.me/source"
POST_PATH="$SOURCE_PATH/_posts"
DRAFT_PATH="$SOURCE_PATH/_drafts"

if [ -d $FULL_PATH ]; then
#hexo publish $POST
mv $DRAFT_PATH/${POST}.md $FULL_PATH/${POST}.md
echo "publish $POST success!"
else
echo "published ERROR!!!"
fi

# todo insert a publish date below the title line
DATE_STR=`date +"%Y/%m/%d %H:%M:%S"`

sed -i '' '3i\
date: '"$DATE_STR"'
' ${FULL_PATH}/${POST}.md

其中, 上面脚本中出现的$HOME/ghui.me/即是我本地Hexo的根目录, 可以直接替换为你自己的即可.
除此之外, 我也写了两个很简单的别的脚本方便hexo写作, 一个是方便创建新草稿的newblog, 一个方便预览草稿的pvblog, 如下:

  1. newblog

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #! /bin/sh
    if [ $# -ne 1 ]
    then
    echo "please input your post name";
    exit 1;
    fi
    cd ~/ghui.me/
    hexo new draft $1
    open ~/ghui.me/source/_drafts/$1.md
  2. pvblog

    1
    2
    3
    #! /bin/sh
    hexo s --draft
    # 哈哈, 就一行

最终, 我是把这三个脚本放在了hexo根目录下的.cml/下, 如图:

方便起见, 你可以把此目录加入到PATH中.

完成上面所有的步骤后, 你会发现博客文章对应的url并不对, 这时你需要去修改你博客根目录下的_config.yml中的permalinkpost/:title/即可.


版权声明

文章版权归本人所有,如需转载需在明显位置处保留作者信息及原文链接 !