Sync obsidian.bash
#!/bin/bash
# --- 配置區 ---
OBSIDIAN_PATH="/e/blog2026/obsidian" # Obsidian 來源路徑
MKDOCS_DOCS_PATH="/e/blog2026/my-docs/docs" # MkDocs 的 docs 目錄
PROTECTED_NAME="assets" # 要保護的資料夾名稱, 注意:這裡只需填寫資料夾名稱,不需要完整路徑
MKDOCS_ROOT="/e/blog2026/my-docs"
PORT=8000
echo "開始同步 Obsidian 筆記..."
# 1. 檢查目錄是否存在
if [ ! -d "$OBSIDIAN_PATH" ]; then
echo "錯誤: 找不到 Obsidian 路徑: $OBSIDIAN_PATH"
exit 1
fi
if [ ! -d "$MKDOCS_DOCS_PATH" ]; then
mkdir -p "$MKDOCS_DOCS_PATH"
fi
# 2. 安全清理
echo "正在清理舊檔案 (保留 $PROTECTED_NAME)..."
# 進入 docs 目錄執行,確保路徑精確
cd "$MKDOCS_DOCS_PATH" || exit
# 刪除除了保護資料夾以外的所有內容
find . -mindepth 1 -maxdepth 1 ! -name "$PROTECTED_NAME" -exec rm -rf {} +
# 3. 執行同步:從 Obsidian 拷貝內容到 docs
echo "正在從 Obsidian 搬運最新筆記..."
# 遍歷 Obsidian 資料夾
# 使用 shopt 讓隱藏檔處理更優雅
shopt -s dotglob
for item in "$OBSIDIAN_PATH"/*; do
name=$(basename "$item")
# 排除不需要同步的資料夾
if [[ "$name" == ".obsidian" || "$name" == ".git" || "$name" == ".trash" ]]; then
continue
fi
# 執行拷貝 (使用 -r 遞迴, -p 保留屬性)
cp -rp "$item" "$MKDOCS_DOCS_PATH/"
done
shopt -u dotglob
echo "同步完成!"
# 根據作業系統自動開啟網頁
URL="http://localhost:$PORT"
case "$OSTYPE" in
msys*) explorer "$URL" ;; # Windows (Git Bash)
darwin*) open "$URL" ;; # macOS
linux*) xdg-open "$URL" ;; # Linux
esac
echo "正在開啟瀏覽器: $URL"
echo "啟動伺服器"
cd "$MKDOCS_ROOT" || exit
mkdocs serve -a localhost:$PORT