Linux服务器下载Google Drive文件:gdown、rclone与curl方案详解
干运维这几年没少被 Google Drive 的下载链接坑过。很多开源数据集、模型权重、备份压缩包都放在 Google Drive 上网页打开很顺畅真到了服务器上想直接拉取各种报错就来了wget 下来是个 HTML、curl 下来提示需要登录、文件超过 2GB 直接拒绝下载。这篇文章就把我在 Linux 服务器上直接下载 Google Drive 数据的几种方案一次性捋清楚从一条命令搞定的 gdown到适合大规模同步的 rclone再到自己写 curl 脚本理解底层协议。适合天天跟服务器打交道的人也适合刚接触 Linux 的算法工程师照着抄。1. 为什么在服务器上下载 Google Drive 数据是个麻烦事1.1 你复制的是网页地址不是下载地址在浏览器里打开 Google Drive 分享链接地址栏显示的是https://drive.google.com/file/d/文件ID/view。这个链接是给人看的网页不是给机器用的下载接口。你把这条链接直接丢给wget或curl服务器拿到的是一段 HTML 页面里面确实藏着文件信息但下载行为不会自动触发。如果文件比较小Google 会给你一个重定向指向drive.google.com/uc?exportdownloadid文件IDwget 加上-L参数还能勉强跟过去。但文件一旦超过某个阈值Google 会先弹出一个“无法安全下载”的病毒扫描确认页要求你提交一个 confirm tokenwget 到这一步就彻底断掉了。很多人在这一步就卡住了以为是网络问题其实不是。Google Drive 的下载协议本身就有两套逻辑小文件走直接重定向大文件走确认页。你需要在脚本里模拟一次表单提交把 Google 下发的 confirm 参数带上下载请求才能拿到真实文件流。仅靠“复制链接 wget”是行不通的。1.2 大文件还有一道“病毒扫描”关卡Google Drive 为了安全会对超过 100MB 的文件做一次病毒扫描。你点击下载时会看到“Google Drive 无法扫描此文件以查找病毒”的提示然后给你两个按钮“仍然下载”和“取消”。这个交互在浏览器里很简单但在服务器上就变成了一道协议门槛你需要先 GET 一次下载页从返回的 HTML 里提取一个 name 为confirm的隐藏字段值然后把这个值拼到下载 URL 的confirm参数里再发起第二次请求。这样 Google 才认为你“确认了仍然下载”开始正经输出文件流。不同的服务器环境、不同版本的 curl 或者 wget 处理这个流程时会有各种细节差异比如 cookie 没有保持、重定向次数不够、URL 参数顺序不对。所以更推荐直接用现成工具而不是重复造轮子。当然如果你需要在没有 Python 环境、不能装第三方包的裸机器上操作那就必须理解这套协议自己用 shell 实现。2. 最省事的方案用 gdown 一条命令搞定2.1 安装与环境准备gdown是我目前用过最省心的 Google Drive 下载工具。它是基于 Python 的内部模拟了浏览器下载的完整流程自动处理大文件确认 token、文件夹打包下载、文件名解析甚至还能接 Google Drive API 来解决限流问题。安装很简单pip install gdown如果你的服务器上有多个 Python 环境注意别装错环境。建议用python3 -m pip install gdown确认装到了当前 Python 对应的 pip 上。装完之后命令行里就有gdown了。没有 sudo 权限的话可以加--user或者用虚拟环境。gdown 的原理不算高深它先请求 Google Drive 的下载接口如果是大文件就解析 HTML 里的 confirm 表单并自动提交。相比 wget它最大的优势是“不用管过程只要给链接或文件 ID”。适合临时把文件拉到服务器上用完即走。2.2 下载单个文件下载一个公开分享、任何人都能查看的文件一行就够gdown https://drive.google.com/uc?id文件ID # 或者更简单直接给文件ID gdown 文件ID # 用 view 链接也可以 gdown https://drive.google.com/file/d/文件ID/viewgdown 会显示下载进度、文件大小和保存的文件名。默认保存到当前目录可以用-O指定输出路径gdown https://drive.google.com/uc?id文件ID -O /data/models/weights.h5这里有个细节Google Drive 的分享文件分两种权限“任何知道链接的人”和“特定用户”。gdown 只能下载前者也就是无需登录就能看的文件。如果链接要求登录gdown 会报错Access denied。这种情况要么让文件所有者把共享权限改成“任何人可查看”要么就得走 API 密钥或者 Service Account后面会提到。2.3 下载整个文件夹gdown 也支持文件夹。Google Drive 的文件夹链接长这样https://drive.google.com/drive/folders/文件夹ID。下载整个文件夹gdown https://drive.google.com/drive/folders/文件夹ID -O /data/dataset --foldergdown 会遍历文件夹里的所有文件然后打包成一个 tar 或者 zip 格式的压缩包再下载。文件特别多、特别大的时候这个过程会很慢而且 gdown 是边打包边下载如果中间断掉只能重新再来。我更推荐用--remaining-ok参数这个参数允许在 Google 显示“下载配额已用完”时仍然尝试逐文件下载。实测下来对于那种几十 GB 的大目录gdown 并不稳定更适合下载单文件或者小规模文件夹。3. 数据工程标配用 rclone 做同步和挂载3.1 初始化配置 Google Drive 远程如果你需要频繁从 Google Drive 同步数据到服务器或者要定期备份rclone 比 gdown 靠谱得多。rclone 是一个命令行同步工具支持几十种存储后端Google Drive 是它支持得最完善的一类。它不只是下载还能增量同步、断点续传、限速、双向对比甚至可以把 Google Drive 挂载成本地目录。安装 rclonecurl https://rclone.org/install.sh | sudo bash配置 Google Drive 远程存储rclone config交互式配置过程会让你选远程类型输入drive。它会问你 client_id 和 client_secret直接回车使用默认值也能跑但缺点很明显默认 client_id 是 rclone 官方的所有用默认配置的人共享这个 API keyGoogle 的速率限制会更严格。如果你经常被Rate limit exceeded报错烦到建议去 Google Cloud Console 自己创建一个 OAuth 客户端把 client_id 填进去限制会宽松不少。配置过程中rclone 会在终端打印一条 URL要求你在浏览器里打开并授权。服务器没有浏览器怎么办两个办法一是用rclone authorize drive在本地电脑上执行一次把得到的 token 粘贴到服务器配置里二是用 rclone 的--drive-service-account-credentials选项配置 Service Account适合纯无人值守的服务器环境。3.2 复制、校验、断点续传配置完成后你会在 rclone 里看到一个远程名字比如gdrive:。接下来的操作跟本地文件复制差不多# 把 Google Drive 上某个文件夹同步到本地 rclone copy gdrive:data /data/google_drive --progress --transfers 4 # 把本地文件备份到 Google Drive rclone copy /data/backup gdrive:backup --progressrclone copy只复制新增或变化的文件已经存在的同名文件会跳过天然支持断点续传。如果下载中断再次执行同一条命令会从断点继续不会从头再来。这个特性在下载大文件时非常实用。如果你想要完全镜像也就是本地和远程保持一模一样用rclone sync但注意 sync 会删除本地多余的文件用之前想清楚。还可以给下载限速避免占满服务器带宽rclone copy gdrive:data /data/google_drive --bwlimit 10M--bwlimit 10M表示限速 10MB/s。同时可以用--transfers调整并发数默认 4 在百兆带宽下够用但千兆服务器可以适当调高到 8 或 16前提是 Google 没有限流。3.3 把 Google Drive 挂载为本地目录rclone 还支持用 FUSE 把 Google Drive 挂载成服务器上的一个目录相当于给服务器加了一块“云硬盘”。挂载之后你可以用普通文件操作的方式读取 Google Drive 里的数据甚至直接跑训练脚本。挂载命令rclone mount gdrive: /mnt/gdrive --allow-other --daemon挂载以后/mnt/gdrive就是一个看起来像本地目录的存在。但我要提醒一句别把随机读取型任务直接跑在挂载盘上。Google Drive API 的延迟和随机读取性能远不如本地 SSD尤其图片、小文件这类场景API 请求量会迅速把你打到配额上限。数据还是要先拉到本地磁盘再处理。挂载更适合偶尔浏览目录结构、或者要手动挑几个文件下载的情况。4. 自己写 curl/wget 脚本彻底搞懂下载协议4.1 下载链接的构成拆解有时候你手里的服务器特别干净不想装 Python、不想装 rclone只有 curl 和 wget。这种场景下你必须自己处理 Google Drive 的下载协议。先拆解链接Google Drive 的分享链接主要有两种文件链接https://drive.google.com/file/d/文件ID/view目录链接https://drive.google.com/drive/folders/文件夹ID直接下载单个小文件其实有一个稳定的 URL 格式curl -L https://drive.google.com/uc?exportdownloadid文件ID -o 文件名exportdownload是告诉 Google 这个请求是下载文件而不是打开网页。-L让 curl 跟随重定向。对小文件这个命令能正常拿到内容。但大文件会在重定向后的页面里插入确认表单所以需要多一步提取 confirm 参数。4.2 处理大文件确认页大文件下载的第一步先用 curl 请求一次带exportdownload的地址把 HTML 抓下来curl -c cookie.txt -s https://drive.google.com/uc?exportdownloadid文件ID page.html然后从page.html里提取 confirm 值。典型 HTML 片段长这样form iddownload-form actionhttps://drive.google.com/uc?exportdownloadidxxx methodpost input typehidden nameconfirm valueTmpVbQ ... /form提取的方法不唯一可以用 grep 或 sedconfirm$(grep -o nameconfirm value[^]* page.html | cut -d -f 4)注意 grep 的正则在不同环境有差异最好用固定的匹配模式。拿到 confirm 之后第二次请求加上这个参数curl -C - -b cookie.txt -L https://drive.google.com/uc?exportdownloadid文件IDconfirm$confirm -o 输出文件名-b cookie.txt是为了带上第一次请求里 Google 设置的 cookie有些情况下这一步不能省。-C -支持断点续传下载到一半断了再跑一次会从断点继续。4.3 写成可复用的 shell 函数每次写这么一串命令太累我习惯把它封装成一个 shell 函数放到/usr/local/bin/gdget里#!/bin/bash # gdget file_id output_name gdget() { id$1 out$2 if [ -z $out ]; then out$id; fi confirm$(curl -c /tmp/gd_cookie -s https://drive.google.com/uc?exportdownloadid$id | grep -o nameconfirm value[^]* | cut -d -f 4) if [ -z $confirm ]; then # 小文件无需确认 curl -C - -L https://drive.google.com/uc?exportdownloadid$id -o $out else curl -C - -b /tmp/gd_cookie -L https://drive.google.com/uc?exportdownloadid$idconfirm$confirm -o $out fi }用的时候source /usr/local/bin/gdget gdget 文件ID 文件名.zip这个脚本不依赖 Python任何带 curl 的 Linux 机器都能跑。但缺点也很明显文件夹下载支持不了文件名需要自己指定如果共享文件设置了权限或者 IP 被限流一样会失败。对我来说写这个脚本最大的价值是理解了 Google Drive 下载协议的本质。如果你以后遇到 gdown 崩溃但又想知道它到底在干嘛这个脚本就是最好的调试工具。5. 常见问题与排查技巧5.1 下载到 HTML、403、quota exceeded 的处理这一类问题是出现频率最高的我整理了排查思路现象根本原因解决办法下载到 HTML 文件直接请求了 view 链接或没加-L用uc?exportdownloadid格式加-L下载页出现“无法安全下载”大文件确认 token 没处理用 gdown或按第 4 节方法提取 confirm403 禁止访问文件未公开分享或 IP 被限流确认文件权限改为“任何人”或换 IP报错Too many users have viewed or downloaded this file recentlyGoogle Drive 配额超限等 24 小时或用自己的 client_id 走 API文件夹打包下载一半断掉gdown 对超大文件夹支持不佳改用 rclone或逐文件下载关于配额超限多说一句。Google Drive 有一个基于 IP 的下载限制同一个 IP 在短时间内下载过多文件时就会触发这个提示。服务器如果是共享 IP 或者 NAT 出口很容易踩中。gdown 的--remaining-ok参数可以在这种时候继续尝试但速度会变慢。更好的办法是配置 Google Drive API 自己的 OAuth client并且用 Service Account 的凭据去下载绕开基于普通网页端的匿名配额。rclone 在配置client_id之后配额也会宽松一些。5.2 下载目录失败、文件名乱码、限速问题有朋友跟我说用 gdown 下载文件夹大目录总是失败。我的经验是不要用 gdown 下载大目录改用 rclone。rclone 会遍历文件夹里的每个文件逐个下载支持断点续传。哪怕中途断掉重跑一次会跳过已下载文件不会从头再来。这是 gdown 没法比的。文件名乱码通常出现在自己写 curl 脚本的时候。Google Drive 返回的文件名在响应头的Content-Disposition字段里中文名会做 URL 编码。要正确还原文件名得对响应头做一次解码。gdown 和 rclone 都处理好了这个如果你用裸 curl建议用-OJ参数让 curl 自动使用服务器返回的文件名但偶尔也会遇到不标准的响应头。实在不行就自己指定-o文件名不纠结。限速问题分两种。一种是 Google 主动限流表现是下载速度波动很大、时不时降到几十 KB/s。这种情况可以降低并发或者等待高峰期过去。另一种是服务器网络带宽本身限制需要检查服务器的带宽监控。我的习惯是 rclone 加--bwlimit明确控制速度避免把服务器的带宽吃满影响线上业务。5.3 反直觉的坑与建议最后分享几个踩过坑后才明白的点。第一注意磁盘空间和 inode。Google Drive 上单个文件显示是 5GB但下载到本地时文件系统上占用的空间可能因为预分配而显得更大。df -h明明还有空间df -i却爆了 inode这种情况在小文件多的目录同步时经常发生。下载前先检查df -h和df -i。第二rclone copy 不会校验文件内容其实默认会做校验但对于大文件它默认用修改时间和大小判断是否需要传输。如果源文件在 Google Drive 上被修改了但大小和时间戳没变rclone 可能跳过。稳妥起见关键数据下载完可以加上--checksum强制校验虽然会慢一些但更可靠。第三不要把账号服务账号绑定到 Google Drive 的某个权限范围后就忘了它只能访问该账号下被授权的文件。用 Service Account 下载别的地方分享给你的文件时需要把文件夹共享给 Service Account 的服务邮箱否则会 404。这个坑能卡你半小时。6. 最后再分享一个小技巧我的实际体会是这几种方式不是互斥的而是分场景配合使用。临时拉一个几 GB 的模型文件用 gdown简单直接每天要从 Google Drive 同步一批数据到服务器做增量更新用 rclone配上自己的 client_id稳定且支持断点续传裸机没有任何 Python 和额外工具也可以用我上面那个 shell 函数应急如果遇到配额限制导致下载失败优先考虑换一个不同出口 IP其次才考虑等配额刷新。对于生产环境建议把数据先同步到一台中转机再分发到其他服务器避免多台机器同时去拉同一个 Google Drive 链接触发更严格的限流。另外下载完大文件之后顺手做一次md5sum或sha256sum。Google Drive 上的文件有时候会上传不完整尤其是别人分享的数据集校验一下落盘内容永远不吃亏。我就在一次下载好几十个压缩包之后吃过亏解压到一半才发现某个包是坏的只能重新拉耽误了不少时间。这些就是我在服务器上直接下载 Google Drive 数据的全部经验了。下次你再遇到服务器上拉不动 Drive 文件的情况先判断文件大小和形态再对症下药基本都能省下不少折腾时间。

相关新闻

标题填入题三大判断标准:对象、信息与文体风格全解析

标题填入题三大判断标准:对象、信息与文体风格全解析

1. 先搞清楚:标题填入题到底在考什么很多考生一看到“标题填入题”就头疼,因为它不像主旨概括题那样目标明确。主旨概括题好歹有“重点句”“分总结构”这些抓手,到了标题题,大家很容易开始凭感觉——哪个选项读着顺、哪个措辞漂亮…

2026/10/1 16:47:53 阅读更多 →
Node.js 错误处理实践:统一使用内建 Error 对象,构建可追踪的异常体系

Node.js 错误处理实践:统一使用内建 Error 对象,构建可追踪的异常体系

文档教程后端 【免费下载链接】nodebestpractices ✅ The Node.js best practices list (July 2026) 项目地址: https://gitcode.com/GitHub_Trending/no/nodebestpractices 点击查看 免费下载 导读 本篇文章围绕 Node.js 最佳实践清单(nodebestpracti…

2026/10/1 16:47:53 阅读更多 →
C语言动态内存分配:malloc/free与内存事故排查实战

C语言动态内存分配:malloc/free与内存事故排查实战

很多学校的C语言课用的是何钦铭、颜晖主编的《C语言程序设计》第四版,这本书到第八章讲指针时,学生基本会迎来第一个两极分化的节点:指针变量、指针数组、函数指针还能靠背概念混过去,但“动态内存分配”这一小节一出来&#xff0…

2026/10/1 16:47:53 阅读更多 →

最新新闻

MCP实战:用AI构建Excel自动化处理服务

MCP实战:用AI构建Excel自动化处理服务

每天跟Excel打交道的朋友应该都有这种体会:处理报表本身不是最费时间的,费时间的是那些重复性的操作——打开表格、定位列、写公式、复制粘贴、再生成新表。尤其是当数据源有变动、格式不统一的时候,整个人都会烦躁起来。 我最近用MCP&#…

2026/10/1 19:00:57 阅读更多 →
SSM+JSP文化遗产管理系统实战:毕业设计稳过方案

SSM+JSP文化遗产管理系统实战:毕业设计稳过方案

简介:本资源是一套基于SSM(SpringSpringMVCMyBatis)框架与JSP技术实现的文化遗产数字化管理系统的完整毕业设计项目,面向计算机、数学、电子信息等专业的本科生,适用于课程设计、期末大作业及毕业论文实践,…

2026/10/1 19:00:57 阅读更多 →
游戏更新后闪退卡死掉帧?三层排查法与系统级优化实战指南

游戏更新后闪退卡死掉帧?三层排查法与系统级优化实战指南

1. 问题定位:先搞清楚是哪种“卡” 9月22号那波更新之后,社区里炸了锅。我自己的机器、帮朋友远程调的几台、还有群里反馈的案例,加起来少说也有二十来台,症状基本能归成三类: 开局加载到一半直接闪退 、 进游戏后画…

2026/10/1 19:00:57 阅读更多 →
AI桌面工作区实战:文档、表格、智能体与工作流的一体化架构

AI桌面工作区实战:文档、表格、智能体与工作流的一体化架构

1. 为什么要把文档、表格、智能体和流程塞进同一个桌面窗口我最早接触“AI 桌面工作区”这个概念,是因为自己每天的工作流实在太碎了。写方案要开文档工具,整理数据要开表格工具,跑自动化要开浏览器或者命令行,调用模型又得切到另…

2026/10/1 19:00:57 阅读更多 →
UEditor下载安装与配置实操:从零到可用完整指南

UEditor下载安装与配置实操:从零到可用完整指南

这段时间因为要维护一个老项目,我把UEditor的下载和安装整个流程重新过了一遍。说实话,这个编辑器虽然年纪不小了,但在很多企业内部系统、CMS后台里依然是主力,网上能找到的教程又零散又过时,真正能把“下载—安装—调…

2026/10/1 19:00:57 阅读更多 →
12G显存硬扛256K上下文:KV缓存卸载到内存的工程实践

12G显存硬扛256K上下文:KV缓存卸载到内存的工程实践

1. 12G 显存硬扛 256K 上下文,这事到底卡在哪先把结论摆在前面:12G 显存想跑 256K 上下文,靠的不是什么黑科技,而是把KV 缓存从显存里"请"出去,挪到内存里。这个思路听起来简单,但真正动手的时候…

2026/10/1 18:59:56 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →