为了一个主题, 我把我的博客框架从Hugo迁移到了Hexo, 但我喜欢的这个主题偏偏不支持Hugo, 我又懒得去折腾移植主题, 故迁之. 但在我使用Hexo的过程中发现了一些不方便的地方, 最想去改变的一个就是本地markdown源文件的管理.
Hexo存在的一个问题
在Hexo中, 你写的markdown博客会存储在your_blog_root_path/source/_posts
下, 这样就存在一个问题, 当你的博客越写越多时, 所有的博客都在这个目录下, 就会导致当你想去修改或去找某一篇文章时, 发现会很难找到它. 这个问题困扰了我一段时间, 后来觉得如果能把source/_posts
下所有的文章按照年/月/标题来划分来管理会方便很多, 最终效果如下:
但这样也有不方便的地方:
- 需要根据当前日期手动的去创建年/月目录
- 每次通过
hexo publish
命令发布文章后, 此文章默认还是会被移动到source/_posts
根目录下, 需要再手动去移动对应博客到指定目录下
如果上面所有这些问题可以自动化来完成就太好了, 为此我去学了学shell脚本编程并总结了一篇博客Shell脚本编程总结及速查手册, 最终也完成了一个脚本解决了上面这些问题. 下面具体说一下如何实现的.
解决方案
实现思路:在hexo中是通过hexo publish
命令来发布一篇draft到source/_posts
目录下, 那么我们就可以通过一个shell脚本来完成整个过程, 此脚本我命名为pbblog
, 首先, 需要根据当前日期, 确定输出目录(比如2016/06), 在这之前要先判断source/_posts
目录下是否存在这个目录只有在不存在的情况下才去创建, 然后再把source/_drafts
目录下的文章移动到source/_posts/
对应的目录下即可, 最后, 再在此markdown文件下的title: xxx
这一行下插入一行日期即可.脚本如下:
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"
if [ ! -d $FULL_PATH ]; then
echo "$FULL_PATH doesn't exit , auto created!"
mkdir -p $FULL_PATH
fi
SOURCE_PATH="$HOME/ghui.me/source"
POST_PATH="$SOURCE_PATH/_posts"
DRAFT_PATH="$SOURCE_PATH/_drafts"
if [ -d $FULL_PATH ]; then
mv $DRAFT_PATH/${POST}.md $FULL_PATH/${POST}.md
echo "publish $POST success!"
else
echo "published ERROR!!!"
fi
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
, 如下:
newblog
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
pvblog
最终, 我是把这三个脚本放在了hexo根目录下的.cml/
下, 如图:
方便起见, 你可以把此目录加入到PATH中.
修改permalink
完成上面所有的步骤后, 你会发现博客文章对应的url并不对, 这时你需要去修改你博客根目录下的_config.yml
中的permalink
为post/:title/
即可.
版权声明
文章版权归本人所有,欢迎转载,但未经本人同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利 !
本文永久链接:ghui.me/post/2016/0…