Skip to content

Instantly share code, notes, and snippets.

@j796160836
Forked from Cyang39/alist-upload.md
Last active May 24, 2025 08:33
Show Gist options
  • Save j796160836/870b0d9c905dbb3a359846702c39eea4 to your computer and use it in GitHub Desktop.
Save j796160836/870b0d9c905dbb3a359846702c39eea4 to your computer and use it in GitHub Desktop.
curl 上传 alist 的 bash 脚本

參考 這篇 分享的 curl 上傳方法編寫的指令碼,目的是簡化 token 獲取到上傳檔案的流程。

個人用在定時檔案備份中。

#!/bin/bash

# 檢查引數數量
if [ $# -ne 6 ]; then
    echo "Usage: $0 --username <username> --password <password> <local-file> <alist-url>"
    exit 1
fi

# 解析輸入引數
USERNAME=$2
PASSWORD=$4
LOCAL_FILE=$5
REMOTE_PATH=$6

# 從 URL 中提取 alist app 的 base URL
BASE_URL=$(echo $REMOTE_PATH | sed 's|\(https://[^/]*\)/.*|\1|')

# 提取 URL 路徑部分(去除 BASE_URL)
REMOTE_FILE_PATH=$(echo $REMOTE_PATH | sed "s|$BASE_URL||")

# 獲取 token
RESPONSE=$(curl --silent --header "Content-Type: application/json" \
  --request POST --data "{\"username\":\"$USERNAME\", \"password\":\"$PASSWORD\"}" \
  "$BASE_URL/api/auth/login")

# 提取 token
TOKEN=$(echo $RESPONSE | grep -o '"token":"[^"]*' | grep -o '[^"]*$')

if [ -z "$TOKEN" ]; then
    echo "Error: Failed to get token"
    exit 1
fi

# 上傳檔案
UPLOAD_URL="$BASE_URL/api/fs/put"
curl -# -T "$LOCAL_FILE" "$UPLOAD_URL" \
  -H "Authorization: $TOKEN" \
  -H "File-Path: $REMOTE_FILE_PATH"

# 提示使用者上傳完成
if [ $? -eq 0 ]; then
    echo "Upload successful!"
else
    echo "Upload failed!"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment