Hexo相关的脚本

由于博主是个懒人,又怕因为手残输错指令或者动到一些文件引起一系列问题,于是写了一些常用的脚本分享一下,之所以都是单个的脚本是为了方便操作,防止误触。

上传仓库

D:\Hexo\Hexo改为自己的博客根目录即可,随后保存为.bat文件

1
2
3
4
5
6
7
@echo off
D:
cd D:\Hexo\Hexo
git add .
git commit -m "github action update"
git push origin main
pause

刷新dns

由于某些情况可能暂时无法访问github,需要更改Hosts,更改完需要刷新DNS才会生效,保存为.bat文件

1
2
3
@echo off
ipconfig /flushdns
pause

新建文章

打开后输入文章名即可新建文章,将D:\Hexo\Hexo更改为自己的博客根目录即可,保存为.sh文件。

1
2
3
4
5
set -e
cd "D:\Hexo\Hexo"
read -p "文章名称: " title
hexo new $layout $title
cd -

本地预览

D:\Hexo\Hexo更改为自己的博客根目录即可,保存为.sh文件。

1
2
cd "D:\Hexo\Hexo"
hexo S

清理缓存

D:\Hexo\Hexo更改为自己的博客根目录即可,保存为.sh文件。

1
2
cd "D:\Hexo\Hexo"
hexo clean

根目录

如果要运行指令需要到跟目录右键打开git,简化操作,一键cd到更目录。将D:\Hexo\Hexo更改为自己的博客根目录即可,保存为.sh文件。

1
2
cd "D:\Hexo\Hexo"
exec /bin/bash

Git拉取推送

直接粘贴仓库地址即可拉取,选择推送之后只需要输入对象文件夹的名字就可以自动上传,并且可以自定义分支。

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
echo "=================================================="
echo " 欢迎使用Git拉取/推送脚本!"
echo "=================================================="

printf "\n[1] 从云端拉取仓库\n"
printf "[2] 推送更改到云端\n"
printf "请选择需要的功能,默认选择 [1] 从云端拉取仓库\n"
printf "选择:"
read answer

if [ "${answer}" = "1" ] || [ "${answer}" = "" ]; then
printf "请输入仓库源码地址: "
read giturl

echo "INFO: 正在拉取仓库..."
git clone "$giturl"
echo "INFO: 拉取完成!"
elif [ "${answer}" = "2" ]; then
printf "请输入当前目录下的文件夹名作为仓库目录: "
read dirname

repodir="./$dirname" # 构建相对路径

if [ -d "$repodir/.git" ]; then
cd "$repodir" || exit 1

# 获取可用分支列表
branchlist=$(git branch --list)
branchlist=${branchlist//$'\n'/} # 移除换行符

if [ -z "$branchlist" ]; then
echo "ERROR: 仓库中没有可用的分支。"
exit 1
fi

# 提取最常用的分支
defaultbranch=$(echo "$branchlist" | awk '{print $2}' | sort | uniq -c | sort -rn | awk 'NR==1{print $2}')

# 选择要推送的分支
printf "\n可用分支:\n"
echo "$branchlist"
printf "\n请输入要推送的分支名(默认为 $defaultbranch):"
read branchname

if [ -z "$branchname" ]; then
branchname="$defaultbranch"
fi

# 推送更改到指定分支
echo "INFO: 正在推送更改到分支 $branchname..."
git add .
git commit -m "自动提交更改"
git push origin "$branchname"
echo "INFO: 推送完成!"
else
echo "ERROR: 输入的目录不是一个有效的Git仓库。"
fi
else
echo "ERROR: 输入错误,请重新运行脚本并选择有效选项。"
fi

Hexo脚本

是以上所有脚本的汇总。

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
#!/bin/bash

set -e

echo "=================================================="
echo " 欢迎使用Hexo拉取/推送脚本!"
echo "=================================================="

currentDir=$(cd "$(dirname "$0")" || exit; pwd)
hexoDir="${currentDir}/Hexo"

printf "\033[1;34m 当前目录:${currentDir}\033[0m\n"
printf "\033[1;34m Hexo目录:${hexoDir}\033[0m\n"

printf "\033[1;34m [0] \033[0m 退出菜单\n"
printf "\033[1;34m [1] \033[0m 从云端恢复Hexo\n"
printf "\033[1;34m [2] \033[0m 推送更改到云端\n"
printf "\033[1;34m [3] \033[0m 刷新DNS\n"
printf "\033[1;34m [4] \033[0m 新建文章\n"
printf "\033[1;34m [5] \033[0m 本地预览\n"
printf "\033[1;34m [6] \033[0m 清理缓存\n"
printf "\033[1;34m [7] \033[0m 切换到Hexo目录\n"
printf "\033[1;34m [8] \033[0m 直达Blog仓库\n"
printf "\033[1;34m [9] \033[0m 本地文章管理\n"
printf "请选择需要的功能,默认选择\033[1;34m [1] \033[0m 从云端恢复Hexo\n"
printf "选择:\n"
read -r answer

if [ "$answer" = "1" ] || [ "$answer" = "" ]; then
printf "\033[1;34mINFO \033[0m 启动拉取器 ...\n"
printf "请输入仓库源码地址: "
read -r giturl
cd "${currentDir}" || exit
git clone "$giturl" "${hexoDir}"
cd "${hexoDir}" || exit
printf "\033[1;34mINFO \033[0m 恢复Hexo中...\n"
npm config set registry https://registry.npm.taobao.org
npm install -g hexo-cli
npm install gulp-cli -g #全局安装gulp,未配置不用开启
npm install --save
printf "\033[1;34mINFO \033[0m 恢复完成,您可以开始您的Hexo之旅了!\n"
elif [ "$answer" = "2" ]; then
if [ -d "${hexoDir}/.git" ]; then
cd "${hexoDir}" || exit 1

# 获取可用分支列表
branchlist=$(git branch --list)
branchlist=${branchlist//$'\n'/} # 移除换行符

if [ -z "$branchlist" ]; then
echo "ERROR: 仓库中没有可用的分支。"
exit 1
fi

# 提取最常用的分支
defaultbranch=$(echo "$branchlist" | awk '{print $2}' | sort | uniq -c | sort -rn | awk 'NR==1{print $2}')

# 选择要推送的分支
printf "\n可用分支:\n"
echo "$branchlist"
printf "\n请输入要推送的分支名(默认为 $defaultbranch):"
read -r branchname

if [ -z "$branchname" ]; then
branchname="$defaultbranch"
fi

# 推送更改到指定分支
echo "INFO: 正在推送更改到分支 $branchname..."
git add .
git commit -m "自动提交更改"
git push origin "$branchname"
echo "INFO: 推送完成!"
else
echo "ERROR: Hexo目录不是一个有效的Git仓库。"
fi
elif [ "$answer" = "3" ]; then
if [[ "$OSTYPE" == "msys" ]]; then
# Windows 下使用 PowerShell 获取管理员权限执行刷新 DNS
echo "INFO: 正在刷新DNS..."
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c ipconfig /flushdns'"
printf "\033[1;34mINFO \033[0m DNS刷新完成!\n"
else
echo "ERROR: 刷新DNS功能仅支持Windows操作系统。"
fi
elif [ "$answer" = "4" ]; then
printf "文章名称: "
read -r title

cd "${hexoDir}" || exit
hexo new "$title"
printf "\033[1;34mINFO \033[0m 文章创建完成!\n"
elif [ "$answer" = "5" ]; then
cd "${hexoDir}" || exit
hexo S & # 启动本地预览,并将其放入后台执行
sleep 1s # 等待一秒,以确保 Hexo 服务器已启动
if [[ "$OSTYPE" == "msys" ]]; then
# Windows 下使用 PowerShell 获取管理员权限执行打开浏览器
echo "INFO: 正在打开浏览器..."
start "http://localhost:4000/"
else
# 其他系统使用默认浏览器打开
echo "INFO: 正在打开浏览器..."
xdg-open "http://localhost:4000/"
fi
elif [ "$answer" = "6" ]; then
cd "${hexoDir}" || exit
hexo clean
printf "\033[1;34mINFO \033[0m 缓存清理完成!\n"
elif [ "$answer" = "7" ]; then
cd "${hexoDir}" || exit
printf "\033[1;34mINFO \033[0m 切换到Hexo目录!\n"
/bin/bash
elif [ "$answer" = "8" ]; then
if [[ "$OSTYPE" == "msys" ]]; then
# Windows 下使用 PowerShell 获取管理员权限执行打开浏览器
echo "INFO: 正在打开浏览器..."
start "https://github.com/L-20021213/Hexo"
else
# 其他系统使用默认浏览器打开
echo "INFO: 正在打开浏览器..."
xdg-open "https://github.com/L-20021213/Hexo"
fi
elif [ "$answer" = "9" ]; then
if [[ "$OSTYPE" == "msys" ]]; then
# Windows 下使用 PowerShell 获取管理员权限执行打开目录
echo "INFO: 正在打开目录..."
start "$(realpath "${hexoDir}/source/_posts")"
else
# 其他系统使用默认文件管理器打开目录
echo "INFO: 正在打开目录..."
xdg-open "$(realpath "${hexoDir}/source/_posts")"
fi
else
printf "\033[1;31mERROR \033[0m 输入错误,请返回重新选择...\n"
sleep 1s
exec "$0"
fi

printf "\033[1;34mINFO \033[0m 按下任意键退出...\n"
read -n 1 -s -r -p ""