hexo的命令比较简单,为了自动化,我写了一个脚本。

TODO:

  • [x] 获取git仓库状态,只在有修改的情况下,才会执行发布操作 – 2016年03月15日
  • [x] 脚本bug,无论如何都显示not modified – 2016年03月19日
  • [x] n命令添加子目录功能,blog.sh n “java/test”就会新建test博客,然后移动到java目录下 – 2016年04月17日
  • [ ] 添加ls参数,列出时间,博客,等信息,方便查看
  • [ ] 提交信息显示更详细的信息(xx博客修改/增加),而不是乏味的site update。

判断git参数是否干净

–porcelain
Give the output in an easy-to-parse format for scripts. This is similar to the short output, but will remain stable across Git versions and regardless of user configuration. See below for details.

脚本

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/bash
# author: mazhibin
# log : 2016-02-25 新建
# : 2016-03-15 获取git仓库状态,只在有修改的情况下,才会执行发布操作
# : 2016-03-18 修复判断git仓库状态的bug(没有搞懂shell的if语句导致的)
# : 2016-04-17 n命令添加子目录功能,blog.sh n "java/test"就会新建test博客,然后移动到java目录下


if [ "$#" = 0 -o "$1" = "-h" ];then
echo "Usage: sh blog.sh [dnp]"
echo " d deployment hexo to github"
echo " n create a new blog"
echo " p publish draft to post"
fi

cd "$(dirname "$0")"

# 判断git仓库是否有未提交的修改
function git_change(){
[ $(git status --porcelain 2>/dev/null | wc -l) != "0" ]
}

# 发布最新博客到github,同时也把hexo参考提交到github
# 如果没有修改则不会进行提交
if [ "$1" = "d" ];then
if ! git_change;then
echo "not modified."
exit
fi
hexo g && hexo d
git add .
git commit -m "Site updated: `date +%Y-%m-%d\ %H:%M:%S`"
git push origin master
echo -e "deploy `date +%Y-%m-%d\ %H:%M:%S`\n" >> ~/blog_log
fi

# 新建博客,也可以新建草稿(可以指定子目录)
if [ "$1" = "n" ];then
blog_dir="other" # 不指定博客子目录,都移动到other下
blog_name="$2"
if [[ "$2" =~ "/" ]];then
# 指定博客在子目录中
blog_dir=$(echo "$2" | sed 's/\/.*//')
blog_name=$(echo "$2" | sed 's/.*\///')
fi

blog_dir="./source/_posts/$blog_dir"

# 先判断子目录是否存在,不存在就咨询要不要新建
if [ ! -d "$blog_dir" ];then
echo "子目录'${blog_dir}'不存在,是否新建?(输入y新建): \c"
read need_create
if [ "$need_create" = 'y' ];then
mkdir $blog_dir
else
echo "子目录不存在,创建博客取消"
exit
fi
fi

# 新建
if [ "$#" = "3" ];then
hexo n "$blog_name" "$3"
else
hexo n "$blog_name"
fi

# 移动(如果覆盖则提示)
find ./source/_posts -maxdepth 1 -type f ! -name ".DS_Store" ! -name "." -exec mv -i {} $blog_dir \;
fi

# 发布草稿到正式博客
if [ "$1" = "p" ];then
hexo p "$2"
fi
#!/bin/bash
# author: mazhibin
# log : 2016-02-25 新建
# : 2016-03-15 获取git仓库状态,只在有修改的情况下,才会执行发布操作
# : 2016-03-18 修复判断git仓库状态的bug(没有搞懂shell的if语句导致的)
# : 2016-04-17 n命令添加子目录功能,blog.sh n "java/test"就会新建test博客,然后移动到java目录下


if [ "$#" = 0 -o "$1" = "-h" ];then
echo "Usage: sh blog.sh [dnp]"
echo " d deployment hexo to github"
echo " n create a new blog"
echo " p publish draft to post"
fi

cd "$(dirname "$0")"

# 判断git仓库是否有未提交的修改
function git_change(){
[ $(git status --porcelain 2>/dev/null | wc -l) != "0" ]
}

# 发布最新博客到github,同时也把hexo参考提交到github
# 如果没有修改则不会进行提交
if [ "$1" = "d" ];then
if ! git_change;then
echo "not modified."
exit
fi
hexo g && hexo d
git add .
git commit -m "Site updated: `date +%Y-%m-%d\ %H:%M:%S`"
git push origin master
echo -e "deploy `date +%Y-%m-%d\ %H:%M:%S`\n" >> ~/blog_log
fi

# 新建博客,也可以新建草稿(可以指定子目录)
if [ "$1" = "n" ];then
blog_dir="other" # 不指定博客子目录,都移动到other下
blog_name="$2"
if [[ "$2" =~ "/" ]];then
# 指定博客在子目录中
blog_dir=$(echo "$2" | sed 's/\/.*//')
blog_name=$(echo "$2" | sed 's/.*\///')
fi

blog_dir="./source/_posts/$blog_dir"

# 先判断子目录是否存在,不存在就咨询要不要新建
if [ ! -d "$blog_dir" ];then
echo "子目录'${blog_dir}'不存在,是否新建?(输入y新建): \c"
read need_create
if [ "$need_create" = 'y' ];then
mkdir $blog_dir
else
echo "子目录不存在,创建博客取消"
exit
fi
fi

# 新建
if [ "$#" = "3" ];then
hexo n "$blog_name" "$3"
else
hexo n "$blog_name"
fi

# 移动(如果覆盖则提示)
find ./source/_posts -maxdepth 1 -type f ! -name ".DS_Store" ! -name "." -exec mv -i {} $blog_dir \;
fi

# 发布草稿到正式博客
if [ "$1" = "p" ];then
hexo p "$2"
fi
0 */12 * * * /Users/mazhibin/project/blog/blog/blog.sh d >/dev/null 2>&1

参考文章