1975 字
10 分鐘
Aria2 搭配 Rclone:下載完成後上傳雲端,驗證成功再清理

想讓 VPS 下載檔案,再搬到自己的雲端硬碟,可以把工作拆成兩段:Aria2 負責下載,Rclone 負責傳到雲端。中間再加一個驗證步驟,確認資料一致,才刪掉本地暫存。

這篇以 Ubuntu 的 Bash 環境為例,先跑通手動指令,再整理成腳本。下載來源限於你有權取得的 HTTP/HTTPS 單一檔案;BT、多檔任務與長期排程,不套用這份範例的假設。

先分清楚工具各自做什麼#

Aria2 是下載工具,也能透過 RPC 接受其他程式的指令。AriaNg 是其中一種圖形介面,但使用 aria2c 指令本身不需要先架設 AriaNg。Aria2 手冊(在新分頁開啟)

Rclone 則透過已設定的 remote 存取雲端儲存空間。本文示範 copy 與 check,不需要先把雲端掛載成磁碟機,也不需要把其他工具改名為 Rclone。

原稿引用的 P3TERX/aria2.sh(在新分頁開啟) 已封存。下面改用一般套件與明確指令,避免把舊腳本的安裝路徑、服務名稱當成每台主機都一樣的設定。

安裝工具並確認版本#

在 Ubuntu 終端機執行:

Terminal window
sudo apt update
sudo apt install aria2 rclone
aria2c --version
rclone version

套件庫提供的版本依 Ubuntu 發行版而異。若需要較新的 Rclone,可以依官方安裝文件(在新分頁開啟)安裝,再記下實際版本,方便之後排錯。

這些指令用在 Linux 終端機,不能直接貼進 Windows PowerShell。若要使用 WSL,也要先進入 Ubuntu,確認執行環境。

設定自己的雲端連線#

執行:

Terminal window
rclone config

建立一個名稱為 gdrive、類型為 Google Drive 的 remote,填入自己的 OAuth client_id 與 client_secret,再選擇可上傳檔案的授權範圍,登入自己的帳號。Rclone 官方已說明共用 client 正在退役,不能沿用舊教學一律留空的做法;建立流程可先看站內的 Google Drive 授權設定。remote 名稱可以自訂,後面的範例則統一使用 gdrive:。

有瀏覽器的電腦可以依提示完成授權。VPS 沒有瀏覽器時,依 Rclone 當下顯示的 rclone authorize 指令,到有瀏覽器的電腦操作,再把授權結果貼回原本的設定流程。具體欄位以目前的 Google Drive backend 文件(在新分頁開啟)為準。

完成後先列出目錄:

Terminal window
rclone listremotes
rclone lsd gdrive:

能看到 gdrive:,只代表設定存在;能成功列出雲端目錄,才表示這次連線與授權可以使用。空的硬碟可能沒有目錄輸出,可再搭配指令退出狀態與錯誤訊息確認。

手動完成一次下載、上傳與比對#

先建立專門放測試檔案的資料夾,下載一份小型 HTML 文件:

Terminal window
mkdir -p "$HOME/aria2-practice"
aria2c --dir="$HOME/aria2-practice" --out="example.html" --allow-overwrite=false --auto-file-renaming=false "https://www.example.com/"

這裡指定固定檔名,並關閉覆寫與自動改名。如果已存在同名檔案,先檢查它的用途,或換一個測試檔名,不要直接清掉整個資料夾。

再把資料夾內的檔案上傳到自己的雲端測試目錄:

Terminal window
rclone copy "$HOME/aria2-practice" "gdrive:aria2-practice" --immutable --progress

這裡以整個測試資料夾為 copy 來源,不會因為來源少了檔案,就刪除目的地的其他檔案;搭配 --immutable,遇到內容不同的既有檔案會報錯,保留目的地內容。請維持資料夾來源的寫法,不要直接換成單一檔案來源。它仍是複製操作,不是完整備份策略。copy 文件(在新分頁開啟)、immutable 說明(在新分頁開啟)

上傳後再比對:

Terminal window
rclone check "$HOME/aria2-practice" "gdrive:aria2-practice" --one-way --download

--one-way 只要求來源的檔案在目的地都有一致內容,不把目的地多出來的檔案當成錯誤。--download 會讀取實際資料進行比對,因此會增加雲端讀取與網路流量;大檔案使用前要把這段成本算進去。check 文件(在新分頁開啟)

手動測試先保留本地檔案,確認雲端上的內容也能正常開啟。自動清理放到下一段腳本處理。

腳本:每次使用獨立暫存目錄#

把下面內容存成 download-and-upload.sh。它只接受三個參數:下載網址、輸出檔名、雲端目的目錄。

#!/usr/bin/env bash
set -euo pipefail
if [[ $# -ne 3 ]]; then
printf 'Usage: %s URL FILENAME REMOTE_DIR\n' "$0" >&2
exit 64
fi
download_url=$1
filename=$2
remote_dir=$3
case "$download_url" in
http://*|https://*) ;;
*) printf 'URL must use HTTP or HTTPS.\n' >&2; exit 64 ;;
esac
case "$filename" in
""|.|..|*/*|*\\*)
printf 'FILENAME must be a single file name.\n' >&2
exit 64
;;
esac
if [[ ! "$remote_dir" =~ ^[A-Za-z0-9_-]+: ]]; then
printf 'REMOTE_DIR must start with a configured remote name.\n' >&2
exit 64
fi
for required_program in aria2c rclone; do
if ! command -v "$required_program" >/dev/null 2>&1; then
printf 'Missing command: %s\n' "$required_program" >&2
exit 69
fi
done
work_dir=$(mktemp -d "${TMPDIR:-/tmp}/aria2-upload.XXXXXX")
local_file="$work_dir/$filename"
remote_file="${remote_dir%/}/$filename"
printf 'Working directory: %s\n' "$work_dir"
aria2c --dir="$work_dir" --out="$filename" \
--allow-overwrite=false --auto-file-renaming=false "$download_url"
rclone copy "$work_dir" "$remote_dir" \
--immutable --progress --retries 3
rclone check "$work_dir" "$remote_dir" --one-way --download
rm -- "$local_file"
rmdir -- "$work_dir"
printf 'Upload verified: %s\n' "$remote_file"

在檔案所在目錄執行:

Terminal window
bash ./download-and-upload.sh "https://www.example.com/" "example.html" "gdrive:blog-downloads"

這裡的 gdrive:blog-downloads 必須換成自己有權寫入的 remote 與目錄。copy 的來源是整個暫存目錄,目的地也是目錄,下載檔案的名稱保持不變。後面的比對則使用同一組目錄。

腳本會印出這次的暫存位置。下載、上傳或比對任何一步失敗,set -e 就會中止後續指令,因此不會走到最後的清理。成功時只刪除該次下載的檔案,再移除已空的暫存資料夾。

它不會自動清除失敗任務,也不會把失敗任務接回下一次下載。若要續傳,請先依印出的路徑檢查殘留檔案與 Aria2 控制檔,再針對同一任務操作;重新跑這份腳本會建立新的暫存目錄。

為什麼不用「上傳後直接刪資料夾」?#

指令沒有印出錯誤,不一定代表整段工作都成功。流程可能在錯誤的帳號、錯誤的路徑上執行,也可能因為檔案衝突而沒有得到預期結果。

這份腳本先用單獨的工作目錄限定處理範圍,再以內容比對確認目的檔案,最後只刪除已知檔名。即使如此,第一次使用仍應先拿小型測試檔練習,檢查真正寫入的雲端位置。

不建議把這個範例改成 rclone sync 或對任意下載根目錄執行遞迴刪除。那會改變檔案刪除的範圍,已經是另一套需要重新驗證的流程。

VPS 長期使用還要考慮什麼?#

VPS 的本地磁碟、下載流量、上傳流量與雲端讀回驗證,都可能影響成本。下載一份檔案後上傳,再讀回比對,流量不只發生一次;請按自己的主機與儲存方案估算。

多個任務同時跑,也會增加暫存空間需求。先限制並行數,保留執行紀錄,再考慮排程,較容易知道失敗發生在哪一個步驟。

如果之後使用 AriaNg,RPC 位址、連線方式與驗證也要另外設定。不要因為前端連不上,就把沒有適當保護的下載服務直接開到公網。

常見問題#

狀況檢查方向
找不到 gdrive:設定 remote 的 Linux 帳號,是否與執行腳本的帳號相同?
授權在電腦成功、VPS 卻失敗VPS 是否完成自己的設定流程,且使用正確設定檔?
immutable 錯誤目的地已有同名但不同內容的檔案,請換名稱或人工確認。
下載後沒有清掉暫存先看上傳與比對是否成功;失敗保留檔案是預期行為。
比對特別久--download 會讀取檔案內容,大檔案需要額外時間與流量。

參考資料#

Aria2 搭配 Rclone:下載完成後上傳雲端,驗證成功再清理
https://aishuafei.com/posts/aria2-rclone-下載超好用/
作者
愛耍廢
發佈於
2026-10-26
許可協議
CC BY-NC-SA 4.0