云计算百科
云计算领域专业知识百科平台

【服务器】上传百度网盘数据至服务器:BaiduPCS-Go(开源命令行工具) + bypy(官方授权)

目录

  • 方法一:使用开源命令行工具 BaiduPCS-Go (最推荐)
    • 实例:下载网盘数据
    • 实例:上传服务器数据至百度网盘(失败,BaiduPCS-Go被禁用)
      • 单个文件测试上传
  • 方法二:使用官方授权的 bypy
  • 服务器中批量裁剪文件
  • 参考

方法一:使用开源命令行工具 BaiduPCS-Go (最推荐)

这是目前在 Linux/Windows 服务器上最流行的第三方工具,它模拟了百度网盘的客户端,支持多线程下载,速度非常快。

  • 下载工具:
  • # 示例:下载适合 Linux 64位的版本(请检查最新版本号)
    wget https://github.com/qjfoidnh/BaiduPCS-Go/releases/download/v3.9.5/BaiduPCS-Go-v3.9.5-linux-amd64.zip
    unzip BaiduPCS-Go-v3.9.5-linux-amd64.zip
    cd BaiduPCS-Go-v3.9.5-linux-amd64
    chmod +x BaiduPCS-Go

  • 登录账号: 运行程序:./BaiduPCS-Go
    进入交互界面后,使用 login 命令。由于服务器通常没有浏览器,推荐使用 BDUSS 登录(Cookie登录)。

    • 如何获取 BDUSS?
  • 方法一:使用快捷键(F12) 在本地浏览器登录百度网盘,按 F12 打开开发者工具 -> Application (或 Storage) -> Cookies -> 找到 BDUSS 的值并复制。

    F12 无效怎么办?换这些方式打开浏览器开发者工具:

    Ctrl + Shift + I
    Ctrl + Shift + J
    Fn + F12
    右键网页空白处 –> 检查 / Inspect
    Chrome/Edge 右上角三个点 –> 更多工具 –> 开发者工具

    方法二:使用浏览器地址栏代码(最快捷,无需 F12)

    这种方法通过在地址栏输入一段 JavaScript 代码来直接弹出 BDUSS,适用于大多数电脑浏览器。

  • 在浏览器中打开 百度首页 (baidu.com) 并确保已经登录账号。

  • 在浏览器的地址栏中,手动输入 javascript: (注意:直接复制粘贴整段代码时,浏览器为了安全通常会自动删掉开头的 javascript:,所以必须手动打这几个字)。

  • 紧接着粘贴以下代码:

    alert(document.cookie.match(/BDUSS=(.*?)(;|$)/)[1])

  • 按回车键。

  • 浏览器会弹出一个窗口,里面的一长串字符就是你的 BDUSS。

    • 在服务器输入:login -bduss=<你的BDUSS>
  • 在这里插入图片描述 3. 下载文件: 登录成功后,使用类似 Linux 的命令操作: * ls:列出文件 * cd:切换目录 * d <文件名>:下载文件 (例如 d movie.mp4)

    优点: 免费、开源、支持多线程、无需图形界面。 缺点: 百度有时会针对非官方客户端限速(账号可能被暂时拉黑导致速度变慢,需要会员解封)。

    实例:下载网盘数据

    cd /geogfs1/home/wanzhougeo/Packages/BaiduPCS-Go-v3.9.5-linux-amd64/

    # 确保先进入正确的下载目录
    ./BaiduPCS-Go config set -savedir /geogfs1/groups/scl/Data/

    # 设置最大并发下载任务数为 50 (根据服务器性能可适当调整,一般 50-100 都可以)
    ./BaiduPCS-Go config set -max_parallel 50

    # 设置下载缓存大小为 256KB (有助于减少磁盘碎片)
    ./BaiduPCS-Go config set -cache_size 262144

    案例1:下载数据

    # 下载地温数据
    ./run_downloadLST.sh
    nohup ./run_downloadLST.sh > downloadLST.log 2>&1 &

    # 下载气温数据
    nohup ./run_downloadTa.sh &
    nohup ./run_downloadTa.sh > downloadTa.log 2>&1 &

    nohup ./run_downloadCode.sh > downloadB0.log 2>&1 &

    用以下命令在 Linux 或 macOS 终端中查看该文件夹的大小:

    du -sh /geogfs1/groups/scl/Data/2860562008_ww_for/

    裁剪文件:

    mv /geogfs1/groups/scl/Data/2860562008_ww_for/Africa_Ta_SVCMsp_2021TMIN_*.tif /geogfs1/groups/scl/Data/2860562008_ww_for/Africa2021/

    mv /geogfs1/groups/scl/Data/2860562008_ww_for/Australia_Ta_SVCMsp_2021TMAX_*.tif /geogfs1/groups/scl/Data/2860562008_ww_for/Australia2021/

    mv /geogfs1/groups/scl/Data/2860562008_ww_for/Australia_Ta_SVCMsp_2021TMIN_*.tif /geogfs1/groups/scl/Data/2860562008_ww_for/Australia2021/

    mv /geogfs1/groups/scl/Data/2860562008_ww_for/ /geogfs1/groups/scl/Data/Global_Ta/

    案例2:下载数据

    实例:上传服务器数据至百度网盘(失败,BaiduPCS-Go被禁用)

    cd /geogfs1/home/wanzhougeo/Packages/BaiduPCS-Go-v3.9.5-linux-amd64/

    # 下载气温数据
    nohup ./run_uploadTa.sh &

    run_uploadTa.sh 脚本完整内容如下:

    #!/bin/bash

    # ================= 配置区域 =================
    PCS_CMD="./BaiduPCS-Go"
    LOCAL_ROOT="/geogfs1/groups/scl/Data/Global_Ta"
    REMOTE_ROOT="/Ta"
    LOG_DIR="./upload_logs"
    CONTINENTS=("EuropeanAsia")
    START_YEAR=2021
    END_YEAR=2024
    # ===========================================

    echo "=========================================="
    echo "=== Start Robust Upload Ta (${START_YEAR} -> ${END_YEAR}) ==="
    echo "=========================================="
    date

    mkdir -p "$LOG_DIR"
    $PCS_CMD mkdir "$REMOTE_ROOT" > /dev/null 2>&1

    for year in $(seq ${START_YEAR} ${END_YEAR}); do
    for continent in "${CONTINENTS[@]}"; do

    FOLDER_NAME="${continent}${year}"
    LOCAL_FOLDER="${LOCAL_ROOT}/${FOLDER_NAME}"
    LOG_FILE="${LOG_DIR}/${FOLDER_NAME}_upload.log"

    echo "—————————————-" | tee -a "$LOG_FILE"
    echo "Processing Folder: ${FOLDER_NAME}" | tee -a "$LOG_FILE"

    if [ ! -d "$LOCAL_FOLDER" ]; then
    echo "[$(date +'%H:%M:%S')] SKIP: Local folder ${LOCAL_FOLDER} does not exist." | tee -a "$LOG_FILE"
    continue
    fi

    # 1. 在网盘创建对应的目标文件夹
    REMOTE_FOLDER="${REMOTE_ROOT}/${FOLDER_NAME}"
    $PCS_CMD mkdir "$REMOTE_FOLDER" >> "$LOG_FILE" 2>&1

    # 2. 核心修改:遍历本地文件夹中的 tif 文件,逐个上传
    # 这样彻底避免了 BaiduPCS-Go 内部并发获取列表导致的 31023 错误
    echo "[$(date +'%H:%M:%S')] Start uploading files one by one to ${REMOTE_FOLDER} …" | tee -a "$LOG_FILE"

    # 统计文件总数用于显示进度
    TOTAL_FILES=$(ls -1 "$LOCAL_FOLDER"/*.tif 2>/dev/null | wc -l)
    CURRENT_FILE=0

    for file in "$LOCAL_FOLDER"/*.tif; do
    # 如果没有匹配到文件,跳过
    [ -e "$file" ] || continue

    ((CURRENT_FILE++))
    FILENAME=$(basename "$file")
    echo "[$(date +'%H:%M:%S')] ($CURRENT_FILE/$TOTAL_FILES) Uploading: $FILENAME" | tee -a "$LOG_FILE"

    # 逐个文件上传到指定的远端目录
    $PCS_CMD upload "$file" "$REMOTE_FOLDER" >> "$LOG_FILE" 2>&1
    done

    echo "[$(date +'%H:%M:%S')] FINISHED: Folder ${FOLDER_NAME} processed." | tee -a "$LOG_FILE"

    done
    done

    echo "========================================"
    echo "=== All Ta data has been uploaded ==="
    echo "========================================"
    date

    设置 最大并发上传数 如下:

    ./BaiduPCS-Go config set -max_upload_parallel 5

    (将最大并发上传数设置为 2 或 1,虽然上传速度会稍微变慢,但会极其稳定,不再报错)

    单个文件测试上传

    测试单个文件的上传:

    ./BaiduPCS-Go upload /geogfs1/groups/scl/Data/Global_Ta/EuropeanAsia2021/EuropeanAsia_Ta_SVCMsp_2021TMAX_001.tif /Ta/EuropeanAsia2021/

    如果单文件测试依然报 31023 错误,请按以下步骤修复: 在这里插入图片描述 第一步:验证是否全局 API 都失效了

    请在终端直接运行查看文件列表的命令:

    ./BaiduPCS-Go ls

    如果这个命令也报错 31023,说明确实是全局的 API 通信问题。

    方法一:修改 AppID(最常见的有效解决方法) 很多时候是因为默认的 AppID 接口被百度限制了。可以尝试修改为一个官方常用的 AppID(例如 266719 或 265486)。

    依次执行以下命令:

    # 将 AppID 修改为常用的 266719 (或者尝试 778750)
    ./BaiduPCS-Go config set -appid=266719
    ./BaiduPCS-Go config set -appid=778750

    # 再次尝试列出网盘目录,看看是否恢复正常
    ./BaiduPCS-Go ls

    # 退出当前账号并重新登录(修改 AppID 后通常需要重新登录才能生效)
    ./BaiduPCS-Go logout
    ./BaiduPCS-Go login

    ./BaiduPCS-Go login -bduss=这里替换成你刚刚复制的BDUSS字符串

    第四步:再次测试单文件上传 当 ./BaiduPCS-Go ls 能够正常打印出网盘里的文件列表,不再报错时,请再次运行之前的测试命令:

    ./BaiduPCS-Go upload /geogfs1/groups/scl/Data/Global_Ta/EuropeanAsia2021/EuropeanAsia_Ta_SVCMsp_2021TMAX_001.tif /Ta/EuropeanAsia2021

    方法二:使用官方授权的 bypy

    与 BaiduPCS-Go 的“破解/模拟”路线不同,bypy 走的是百度官方的开发者 API 接口,因此极其稳定,几乎永远不会报 31023 这种风控错误。

  • 安装 bypy(HPC 通常都自带 Python 环境):

    pip install bypy

    (如果提示权限不足,可以加 –user: pip install bypy –user) 在这里插入图片描述

  • 进行官方授权登录: 在终端输入:

    bypy info

    终端会输出一个链接。复制这个链接,在您登录了百度网盘的电脑浏览器里打开。 网页会显示一串授权码。将这串授权码复制,粘贴回 Linux 终端并回车。就登录成功了!

  • 使用限制与方法(重要): 因为走的是官方接口,为了安全,百度限制 bypy 只能访问网盘里的一个特定文件夹,路径是: 我的网盘 / 我的应用数据 / bypy (或者 apps/bypy)

    • 下载文件:需要先在电脑或手机上,把想下载的数据移动到网盘的 我的应用数据/bypy 文件夹里。然后在终端运行:bypy down 文件名
    • 上传文件:在终端运行:bypy upload 本地文件名
      文件会被上传到网盘的 我的应用数据/bypy 目录下。
  • # 下载气温数据
    nohup ./run_uploadTa.sh &

    run_uploadTa.sh 脚本内容如下:

    #!/bin/bash

    # ================= 配置区域 =================
    # 将原来的 BaiduPCS-Go 替换为 bypy
    BYPY_CMD="bypy"
    LOCAL_ROOT="/geogfs1/groups/scl/Data/Global_Ta"

    REMOTE_ROOT="Ta"
    LOG_DIR="./upload_logs"
    CONTINENTS=("EuropeanAsia")
    START_YEAR=2021
    END_YEAR=2022
    # ===========================================

    echo "=========================================="
    echo "=== Start Robust Upload Ta (${START_YEAR} -> ${END_YEAR}) ==="
    echo "=========================================="
    date

    mkdir p "$LOG_DIR"
    # 使用 bypy 创建远端根目录
    $BYPY_CMD mkdir "$REMOTE_ROOT" > /dev/null 2>&1

    for year in $(seq ${START_YEAR} ${END_YEAR}); do
    for continent in "${CONTINENTS[@]}"; do

    FOLDER_NAME="${continent}${year}"
    LOCAL_FOLDER="${LOCAL_ROOT}/${FOLDER_NAME}"
    LOG_FILE="${LOG_DIR}/${FOLDER_NAME}_upload.log"

    echo "—————————————-" | tee a "$LOG_FILE"
    echo "Processing Folder: ${FOLDER_NAME}" | tee a "$LOG_FILE"

    if [ ! d "$LOCAL_FOLDER" ]; then
    echo "[$(date +'%H:%M:%S')] SKIP: Local folder ${LOCAL_FOLDER} does not exist." | tee a "$LOG_FILE"
    continue
    fi

    # 1. 在网盘创建对应的目标文件夹
    REMOTE_FOLDER="${REMOTE_ROOT}/${FOLDER_NAME}"
    $BYPY_CMD mkdir "$REMOTE_FOLDER" >> "$LOG_FILE" 2>&1

    # 2. 遍历本地文件夹中的 tif 文件,逐个上传
    echo "[$(date +'%H:%M:%S')] Start uploading files one by one to ${REMOTE_FOLDER} …" | tee a "$LOG_FILE"

    # 统计文件总数用于显示进度
    TOTAL_FILES=$(ls 1 "$LOCAL_FOLDER"/*.tif 2>/dev/null | wc l)
    CURRENT_FILE=0

    for file in "$LOCAL_FOLDER"/*.tif; do
    # 如果没有匹配到文件,跳过
    [ e "$file" ] || continue

    ((CURRENT_FILE++))
    FILENAME=$(basename "$file")
    echo "[$(date +'%H:%M:%S')] ($CURRENT_FILE/$TOTAL_FILES) Uploading: $FILENAME" | tee a "$LOG_FILE"

    # 逐个文件上传到指定的远端目录
    # bypy upload <本地路径> <远端路径>
    $BYPY_CMD upload "$file" "$REMOTE_FOLDER" >> "$LOG_FILE" 2>&1
    done

    echo "[$(date +'%H:%M:%S')] FINISHED: Folder ${FOLDER_NAME} processed." | tee a "$LOG_FILE"

    done
    done

    echo "========================================"
    echo "=== All Ta data has been uploaded ==="
    echo "========================================"
    date

    服务器中批量裁剪文件

    cp /geogfs1/groups/scl/Data/Ta_SVCMsp_global_V2026/2_output/Ta2021/EuropeanAsia2021/ /geogfs1/groups/scl/Data/Global_Ta/EuropeanAsia2021/

    /geogfs1/groups/scl/Data/Ta_SVCMsp_global_V2026/2_output/Ta2021/EuropeanAsia2021rep/

    cd /geogfs1/groups/scl/Data/Ta_SVCMsp_global_V2026/2_output/
    chmod +x copy_ta_data.sh

    dos2unix copy_ta_data.sh
    ./copy_ta_data.sh 2022
    ./copy_ta_data.sh 2020 2021 2022

    copy_ta_data.sh 脚本内容如下:

    #!/bin/bash

    # 检查是否提供了年份参数
    if [ "$#" -eq 0 ]; then
    echo "使用方法: $0 <年份1> [年份2] [年份3] …"
    echo "示例: $0 2021 2022 2023"
    exit 1
    fi

    # 遍历所有传入的年份参数
    for YEAR in "$@"; do
    echo "========================================"
    echo "正在处理年份: ${YEAR} …"

    # 定义对应年份的文件夹路径
    SRC_DIR="/geogfs1/groups/scl/Data/Ta_SVCMsp_global_V2026/2_output/Ta${YEAR}/EuropeanAsia${YEAR}"
    REP_DIR="/geogfs1/groups/scl/Data/Ta_SVCMsp_global_V2026/2_output/Ta${YEAR}/EuropeanAsia${YEAR}rep"
    TARGET_DIR="/geogfs1/groups/scl/Data/Global_Ta/EuropeanAsia${YEAR}"

    # 1. 创建目标文件夹(如果不存在的话,-p 参数会自动创建父目录且不会报错)
    mkdir -p "${TARGET_DIR}"
    echo "已确保目标文件夹存在: ${TARGET_DIR}"

    # 2. 拷贝原始数据
    if [ -d "${SRC_DIR}" ]; then
    echo "正在拷贝原始数据: ${SRC_DIR} -> ${TARGET_DIR}"
    # 拷贝所有 tif 文件。2>/dev/null 用于隐藏找不到文件时的系统报错,由后面的 echo 提供友好提示
    cp "${SRC_DIR}"/*.tif "${TARGET_DIR}/" 2>/dev/null || echo " [警告] ${SRC_DIR} 中没有找到 .tif 文件。"
    else
    echo " [错误] 原始数据文件夹不存在: ${SRC_DIR}"
    fi

    # 3. 拷贝替换数据 (使用 -f 强制覆盖同名文件)
    if [ -d "${REP_DIR}" ]; then
    echo "正在拷贝并替换数据: ${REP_DIR} -> ${TARGET_DIR}"
    cp -f "${REP_DIR}"/*.tif "${TARGET_DIR}/" 2>/dev/null || echo " [提示] ${REP_DIR} 中没有找到需要替换的 .tif 文件。"
    else
    echo " [提示] 替换文件夹不存在,跳过替换步骤: ${REP_DIR}"
    fi

    echo "年份 ${YEAR} 处理完成!"
    done

    echo "========================================"
    echo "所有指定年份的数据拷贝与替换任务已全部执行完毕!"

    参考

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【服务器】上传百度网盘数据至服务器:BaiduPCS-Go(开源命令行工具) + bypy(官方授权)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!