首页
首页

mac版hexo更新blog

代码如下:

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

#!/bin/bash

# ====== 配置路径 ======
source_folder="$HOME/Library/Obsidian/1-blog"
destination_folder="$HOME/blog/source/_posts"
image_folder="$HOME/Library/blog/source/images"
hexo_root="$HOME/Library/blog"
log_file="$hexo_root/deploy.log"

# ====== 参数处理 ======
PREVIEW=false
BACKUP=false
for arg in "$@"; do
case $arg in
--preview) PREVIEW=true ;;
--backup) BACKUP=true ;;
esac
done

# ====== 日志函数 ======
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" | tee -a "$log_file"
}

# ====== 检查 SSH 连接 ======
log "🔐 检查 GitHub SSH 连接..."
if ! ssh -T [email protected] 2>&1 | grep -q "successfully authenticated"; then
log "❌ SSH 未配置或连接失败!请先配置 GitHub SSH key:https://github.com/settings/keys"
exit 1
fi
log "✅ SSH 连接正常"

# ====== 可选备份 ======
if $BACKUP; then
backup_zip="$HOME/Desktop/1-blog-backup_$(date +'%Y%m%d-%H%M%S').zip"
log "🗃️ 正在备份 Obsidian 博客目录..."
zip -r "$backup_zip" "$source_folder" >/dev/null
log "✅ 已备份到桌面:$backup_zip"
fi

# ====== 确保目录存在 ======
mkdir -p "$destination_folder"
mkdir -p "$image_folder"

# ====== 增量同步 Markdown 和图片文件 ======
log "📥 增量同步 Markdown 和图片..."
rsync -av --include="*/" \
--include="*.md" \
--include="*.png" \
--include="*.jpg" \
--include="*.jpeg" \
--include="*.gif" \
--include="*.svg" \
--include="*.webp" \
--exclude="*" \
"$source_folder"/ "$destination_folder"/

# ====== 替换图片语法 & 拷贝图片 ======
log "🛠 替换 Obsidian 图片语法,并复制图片..."

find "$destination_folder" -name "*.md" | while read -r mdfile; do
rel_md_path="${mdfile#$destination_folder/}"
original_md="$source_folder/$rel_md_path"
original_md_dir=$(dirname "$original_md")

# 查找 Obsidian 图片语法
perl -nle 'print $1 while /\!\[\[\s*(.*?)\s*\]\]/g' "$mdfile" | while read -r relimg; do
imgname=$(basename "$relimg")
src_img="$original_md_dir/$relimg"
dest_img="$image_folder/$imgname"

if [[ -f "$src_img" ]]; then
# 增量复制
if [[ ! -f "$dest_img" ]]; then
cp "$src_img" "$dest_img"
log "🖼 已复制图片: $src_img -> $dest_img"
fi
else
log "⚠️ 图片未找到: $src_img"
fi
done

# 替换 Obsidian 语法为 Hexo 路径
perl -i -pe 's/\!\[\[\s*(.*?)\s*\]\]/![]\(\/images\/\1\)/g' "$mdfile"
perl -i -pe 's/\/images\/.*\/([^\/]+\.(png|jpg|jpeg|gif|svg|webp))/\/images\/$1/g' "$mdfile"
done

log "✅ 图片路径修复完成"

# ====== Hexo 构建或预览 ======
cd "$hexo_root" || { log "❌ Hexo 根目录不存在"; exit 1; }

log "🧹 Hexo 清理 & 生成中..."
hexo clean && hexo generate

if $PREVIEW; then
log "🌐 启动本地预览..."
hexo server &
sleep 2
open "http://localhost:4000"
log "✅ 浏览器已打开本地预览"
else
log "🚀 正在部署 Hexo 博客..."
hexo deploy && log "✅ 部署完成"
fi