用兩哪的開放 API 做指定 Folder 同步 · 單向 / 雙向都做到
事前準備、工作原理、系統負荷、實戰腳本、cron 排程 —— 一次過講清
Google Drive 同夸克網盤都開放 API,但兩哪係不同的雲端,沒有直接互傳通道。同步的本質 = 一部中間機器(VM)定時「查看兩哪 → 對比 → 補齊」。用的係兩哪官方開放 API,$0 成本,不使任何第三方中介。
反向同步(夸克 → GDrive)就是將鏈路反向;雙向同步 = 兩條鏈路同時執行 + 衝突規則。
定時 list 兩哪檔案,檔名 + 大小 + 修改時間 diff,有缺有變先傳
沒有 server-to-server 直傳,檔案一定要經中間機暫存再上傳
兩哪 API 都不收費(有免費額度),VM 用 Oracle Always Free 都夠跑
單向備份 / 單向歸檔 / 雙向同步,folder 自訂,頻率自訂
開始之前,逐項準備好下面的帳號同工具。大部分你已經有 —— 不使買任何東西。
| 檔案 / 帳號 | 點樣準備 | 用途 |
|---|---|---|
| 夸克網盤帳號 | pan.quark.cn 註冊(APP / 網頁都得,免費 10GB) | 同步目標 / 來源之一 |
| Google 帳號 + Drive | 普通 Gmail 帳號 + 有 Drive 空間 | 同步目標 / 來源之一 |
| Google Cloud OAuth 憑證 | Google Cloud Console → APIs & Services → OAuth Client ID(Desktop 類型),下載 JSON | GDrive API 授權(client_id / client_secret) |
| Linux VM | Oracle Always Free ARM(2 OCPU / 12GB)或任何有 Node ≥16 的機 | 行 sync script + cron |
| Node.js ≥ 16 | node --version 檢查,沒有就裝 | 夸克官方 CLI 需要 |
| 夸克網盤 Skill(官方 zip) | 官方下載:quarkclouddrive-1.0.11.zip | 夸克 API CLI(search / upload / download) |
| gws CLI 或 google_api.py | Hermes google-workspace skill 內置,或用 gcloud 生態工具 | GDrive API 操作 |
夸克官方發佈了一個命令行 Skill(Skill 包 = SKILL.md + scripts + references),入面的 quark-drive.cjs 就是完整 CLI,包晒檔案上傳/下載/搜尋/分享。
這個係夸克官方 pdds 分發網址,zip 內含 SKILL.md、scripts/(CLI)、references/(操作文件)。
放在全局目錄(不要放在項目目錄),任何項目都能用。
見到版本號即安裝成功。所有夸克操作都透過 node scripts/quark-drive.cjs <命令> 執行。
CLI 用夸克開放平台 OAuth 授權。在普通桌面機一跑 login 就會自動開瀏覽器;但在無桌面的 server(例如 Oracle VM)就要用下面流程。
在無 browser 的環境,命令會即時 fail,但錯誤訊息入面有一條完整授權 URL(開頭係 https://pan.quark.cn/open/v1/oauth/agent?...)。複製它。
用夸克網盤 APP 掃 QR code,或者瀏覽器開連結登入 → 點擊「授權」。授權頁會顯示一個 授權碼(格式 AAC-xxxx...),複製它。
code:0 即成功,access token 已存本地(之後所有命令自動用)。
搜到檔案 = 授權有效。常用命令:search(搜尋)、upload、download、create-folder、share。
login 拿新連結。授權過一次之後,refresh token 自動續期,不需要再操作。~/.hermes/skills/quarkclouddrive/ 內會存 access token —— 這個係敏感資料,公開 repo / 備份前一定要排除。Google 側要在 Cloud Console 開一個 OAuth Client,再授權一次,取得 token 先可以讀寫你的 Drive。
Google Cloud Console → APIs & Services → OAuth consent screen(External + 加自己做測試使用者)→ Credentials → Create OAuth Client ID → 類型選擇 Desktop app → 下載 client_secret.json。
用 gws CLI 或任何 OAuth 流程(本機開 browser → 授權 → 回調拿 code → 換 token.json)。之後所有 Drive 操作都用 token.json。
同步引擎行三步:list → diff → transfer。每次運行都是這樣循環,分別只在 diff 的規則。
| 情況 | 單向(GDrive → 夸克) | 單向(夸克 → GDrive) | 雙向 |
|---|---|---|---|
| A 有、B 沒有 | 上傳去夸克 | 上傳去 GDrive | 上傳去另一哪 |
| 兩哪都有、內容不同 | GDrive 版覆蓋夸克 | 夸克版覆蓋 GDrive | 修改時間新者勝 |
| 兩哪一樣(名+大小+時間) | 跳過(不浪費流量) | ||
| A 沒有、B 有(刪除) | 刪夸克 / 保留 | 刪 GDrive / 保留 | ⚠️ 要設規則(見 §7) |
最常見場景:GDrive 係 master,夸克做備份。寫一個 Python sync script,定期跑。
↑ 完整版會加埋大小/修改時間比較、錯誤重試、日誌輸出 —— 上面係核心骨架,跑通先再擴充。
雙向 = 兩哪都是 master。風險係衝突同刪除,所以要多做兩件事:修改時間比較同垃圾桶規則。
兩哪都有同名檔 → 比較 modifiedTime(GDrive API 有;夸克 API 有 updated_at),新的覆蓋舊的。時間差少於 2 秒當相同(時鐘偏差容錯)。
同大小同時間不等於同內容。為求穩妥:檔案 < 50MB 可以比對 MD5/SHA1(GDrive 有內建 MD5 checksum,夸克要下載才能計算 —— 所以預設不建議那麼做,太耗流量)。權衡
雙向同步最大地雷:A 刪了檔案,同步過去會連 B 那份也刪除。建議:不同步刪除,或者刪除之前先移去「垃圾桶」保留 30 日。
同步 script 寫好之後,用 cron 定時跑就變成全自動。以下係常用頻率:
/usr/bin/python3、~/bin/... 展開),不要只寫 python3,否則 cron 執行時會找不到。*/30 * * * * 那一行改用 >> sync.log,然後每週手動 truncate -s 0 sync.log 或安裝 logrotate。同步是「輕量但間歇性」的 workload:平時幾乎零負載,傳大檔時才消耗資源。以下是實測數量級:
| 項目 | 估算 | 備註 |
|---|---|---|
| CPU(list + diff) | < 5 秒 / 1000 檔 | 主要係 API 回應等待,不是運算 |
| CPU(傳檔) | 單核心 20–40% | 上傳/下載壓縮加密,短暫 |
| 記憶體 | 30–80 MB | Python + 兩個 CLI 子進程 |
| VM 暫存磁碟 | 最大單檔 × 2 | 下載下來 + 上傳進行中同時存在 |
| 網絡流量 | 每次 = 變更檔案總量 × 2 | GDrive 下載 + 夸克上傳,各計一次 |
| API 配額(GDrive) | list 1 req + 每檔 download 1 req | 免費 quota 每日約 100 萬次,家用 100 萬倍有餘 |
| API 配額(夸克) | search 1 req + 每檔 upload 1 req | 免費額度內,但不要狂刷(見 §10) |
| Oracle Always Free 夠不夠 | ✅ 綽綽有餘 | 2 OCPU / 12GB 行 cron 同步完全沒有壓力 |
AAC-xxx 授權碼回來用 login --token 綁定。df -h,不夠位會 sync 失敗(temp 檔要即傳即刪)。cd,仲要確認 script 有 chmod +x 或者用 /usr/bin/python3 直接叫。.gitignore。| 命令 | 作用 |
|---|---|
node quark-drive.cjs search --keyword "K" | 搜尋夸克檔案 |
node quark-drive.cjs upload "file" --name "名" | 上傳去夸克 |
node quark-drive.cjs download --fid "..." | 下載夸克檔案 |
node quark-drive.cjs create-folder "名" | 開資料夾 |
node quark-drive.cjs share --fid "..." | 分享連結 |
node quark-drive.cjs whoami / login --token AAC-... | 看帳號 / 綁定授權 |
gws drive search "trashed = false" --max 100 | 列 GDrive 檔案 |
gws drive download <file_id> --output 路徑 | 下載 GDrive 檔案 |
crontab -e / crontab -l | 編輯 / 看排程 |
| 路徑 | 說明 |
|---|---|
~/.hermes/skills/quarkclouddrive/scripts/quark-drive.cjs | 夸克 CLI 主程式 |
~/.hermes/skills/quarkclouddrive/(config 目錄) | 夸克授權 token 存放處 |
client_secret.json + token.json | GDrive OAuth 憑證 |
/home/ubuntu/sync/gdrive2quark.py | 同步 script(示例位置) |
/home/ubuntu/sync/sync.log | 同步日誌 |
| □ | 檢查項 |
|---|---|
| □ | 夸克 CLI 執行 --version,search 搜到網盤檔案 |
| □ | GDrive gws drive search 出到檔案列表 |
| □ | sync script 手動行一次成功(不要直接上 cron) |
| □ | 目標 folder 兩哪檔案數一致(search --keyword 對數) |
| □ | cron 加入 + 等一個週期,確認 sync.log 有新輸出 |
| □ | token 檔案確認沒有入任何 git repo |
喜歡這份教學?請我飲杯咖啡 ☕
☕ 請我飲咖啡