我的搬移規則是把Obsidian Vault下符合以下條件的檔案搬移:
- 根目錄下僅.md檔
- 所有「.紀錄|」開頭的資料夾(符合我原本的資料夾規則)
- 子資料夾種僅.md檔 與 .png檔 並且排除原本在Obsidian Vault中的.git檔,以免Push上Github Page的干擾。
腳本 1:1_SyncFiles.ps1 (負責搬移與過濾)
# 強制 UTF8 BOM 編碼
$OutputEncoding = [System.Text.Encoding]::UTF8
# 1. 路徑設定
$sourceParent = "我的Obsidian筆記路徑"
$destinationParent = "我的Quartz發布路徑"
Write-Host "--- 開始安全搬移作業 (過濾機密) ---" -ForegroundColor White
# 2. 先清空目的地 content 確保乾淨 (防止舊機密殘留)
if (Test-Path $destinationParent) {
Remove-Item -Recurse -Force "$destinationParent\*"
} else {
New-Item -ItemType Directory -Path $destinationParent
}
# 3. 搬移「根目錄下」的所有 .md 檔案 (不進子資料夾)
Write-Host "📄 正在同步根目錄下的 .md 檔案..." -ForegroundColor Green
robocopy "$sourceParent" "$destinationParent" *.md /LEV:1 /R:2 /W:5
# 4. 遍歷並同步「.紀錄|」開頭的資料夾 (含 .md 與 .png)
Write-Host "📂 正在同步 .紀錄| 開頭的資料夾內容..." -ForegroundColor Cyan
Get-ChildItem -Path $sourceParent -Directory -Filter ".紀錄|*" | ForEach-Object {
$folderName = $_.Name
$dest = Join-Path $destinationParent $folderName
# 同步該資料夾及其子目錄下的 md 和 png,排除其他格式
robocopy "$($_.FullName)" "$dest" *.md *.png /S /R:2 /W:5
}
# 5. 清除殘留的 .git 紀錄,防止 GitHub 識別為子模組而無法讀取
Write-Host "🧹 正在清除 content 內的 Git 殘留..." -ForegroundColor Magenta
Get-ChildItem -Path $destinationParent -Include ".git" -Recurse -Hidden | Remove-Item -Recurse -Force
Write-Host "---"
Write-Host "✅ 搬移完成!請檢查 D 槽 content 資料夾內容是否正確。" -ForegroundColor Green
Read-Host "按 Enter 鍵結束"以上腳本還有優化的空間。比如說搬移的時候採用/MIR並且去掉「先清空目的地 content 確保乾淨」。
腳本 2:2_PublishToGithub.ps1 (負責上傳與發布)
# 強制 UTF8 BOM 編碼
$OutputEncoding = [System.Text.Encoding]::UTF8
# 1. 路徑設定
$quartzPath = "我的Quartz發布路徑"
Write-Host "--- 開始執行 GitHub 發布作業 ---" -ForegroundColor White
if (Test-Path $quartzPath) {
Set-Location -Path $quartzPath
# 2. 登記所有變動檔案
Write-Host "🔍 正在檢查變動..." -ForegroundColor Cyan
git add .
# 3. 檢查是否有實際變動才進行提交
$status = git status --porcelain
if ($status) {
$commitMsg = "Secure Sync: $(Get-Date -Format 'yyyy-MM-dd HH:mm')"
git commit -m "$commitMsg"
Write-Host "📤 正在上傳至 GitHub 並啟動 Quartz 同步..." -ForegroundColor Yellow
# 執行 Quartz 同步指令
npx quartz sync
Write-Host "🚀 上傳成功!網頁將在 1 分鐘後更新。" -ForegroundColor Green
} else {
Write-Host "✨ 內容無變動,無需更新 GitHub。" -ForegroundColor Gray
}
} else {
Write-Host "❌ 找不到 Quartz 路徑,請確認路徑設定。" -ForegroundColor Red
}
Write-Host "---"
Read-Host "✅ 任務完成!按 Enter 鍵離開"將腳本分為兩個步驟:搬移、同步,提供在本地運行確認效果的機會,因為Push上Github Page要等待時間同步,不滿意的話可能還需要退回版本,嘗試的成本比較高。
我做過的其他嘗試
-
Softlink 可以想見這對Github Page是行不通的,因為Soft Link是指向本地的資料夾,Github根本無法讀取。
雖然在Local運行得非常順利甚至可以達到熱重載的效果,因為對Quartz來說沒有任何文件修改,所以每次的筆記修改都可以非常及時看到效果(Quartz本身的Config等文件修改還是會重新build),給想要這種效果的人參考。
未來展望
- 把這個腳本寫成Obsidian的按鈕,減少發布時切換畫面找腳本的步驟
- 實現類似IDE Git Tool的功能,可自行選擇要上架的筆記,不被搬移規則限制
[!注意注意!] 我已經完成了搬移筆記的Plugin!!—2026/1/28