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