在云服务器上下载训练或者测试用数据的时候,由于目标文件体积很大,所以经常出现下载失败的情况。为此,参考 DenseFusion 的数据集下载脚本。从中抽取出来一个万能模板,如下所示:

#!/usr/bin/env bash
# ==========  用户只需要改这里  ==========
FILE_ID="1if4VoEXNx9W3XCn0Y7Fp15B4GpcYbyYi"   # Google Drive 的 id= 后面那段
ZIP_NAME="YCB_Video_Dataset.zip"              # 下载到本地的压缩包名字
TARGET_DIR="datasets/ycb/YCB_Video_Dataset"   # 最终想要的目录(检查是否存在)
# ========================================

# 如果目标目录已存在,直接跳过
if [ -d "$TARGET_DIR" ]; then
    echo "[INFO] $TARGET_DIR already exists, skip downloading."
    exit 0
fi

echo "[INFO] Downloading $ZIP_NAME from Google Drive..."
COOKIE="/tmp/gd_cookie_$RANDOM.txt"

# 1. 先拿 cookie + 提取 confirm token
CONFIRM=$(wget --quiet --save-cookies "$COOKIE" --keep-session-cookies --no-check-certificate \
    "https://docs.google.com/uc?export=download&id=${FILE_ID}" -O- | \
    sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1/p')

# 2. 真正下载文件
wget --load-cookies "$COOKIE" \
     "https://docs.google.com/uc?export=download&confirm=${CONFIRM}&id=${FILE_ID}" \
     -O "$ZIP_NAME"

rm -f "$COOKIE"   # 清理临时 cookie

# 3. 解压 → 搬运 → 删包
echo "[INFO] Unzipping..."
unzip -q "$ZIP_NAME"
# 如果压缩包顶层目录名字和 TARGET_DIR 不一致,自行改下面一行
mv "$(basename "$ZIP_NAME" .zip)" "$TARGET_DIR"
rm -f "$ZIP_NAME"

echo "[INFO] Done. Dataset location: $TARGET_DIR"

更多推荐