下载大型 Google 云端硬盘文件

问题描述 投票:0回答:4

我刚刚在谷歌驱动器中得到了一个包含 500mb 文件的大列表。我该如何在本地 Linux 机器上对它们进行排队下载?

我无法将它们全部压缩为大型下载

我无法将它们全部设置为一次下载

我不能整天在这里小批量下载它们。

我从像wget/curl来自谷歌驱动器的大文件这样的文档中看到,API已从谷歌驱动器中贬值,我们无法获取它们。

所以我正在寻找一种从谷歌驱动器顺序下载大文件的方法,而无需手动单击网络浏览器来执行此操作。

bash curl wget google-docs-api
4个回答
11
投票
  1. 前往OAuth 2.0 Playground
  2. 在选择和授权 API(步骤 1)中,选择“Drive API v3”,然后选择“https://www.googleapis.com/auth/drive.readonly”作为范围。
  3. 使用 Google ID 授权 API 并用授权码换取令牌(步骤 2)。我们将获得访问令牌和刷新令牌
  4. 打开终端并运行

curl -H "Authorization: Bearer XXXXX" https://www.googleapis.com/drive/v3/files/YYYYY?alt=media -o ZZZZZ

哪里

XXXXX===> Access Token

YYYYY===> File ID

ZZZZZ===> File Name that will be saved

5.在 Linux 上测试(也应该在 Mac 上工作)。 Windows 可以尝试使用 PowerShell。

参考:驱动器 REST API 文档。


1
投票

我将解释我如何解决我的问题:

使用 https://github.com/prasmussen/gdrive 按照页面上的说明进行设置。现在并没有贬值,像我原来的错觉一样。

右键单击文件。获取可共享的链接。 (

gdrive list
在这种情况下不起作用,因为它不在您的驱动器中,而是在其他人的驱动器中。可以考虑将其复制到您的存储库,并从那里获取列表。)

将所有链接粘贴到纯文本文件中,然后从所有链接的开头删除

https://drive.google.com/open?id=

然后您可以使用以下命令依次下载谷歌驱动器文件列表:

while read p; do ./gdrive download $p; done <files.txt


0
投票

Google Drive Sync 帮我解决了这个问题。您可以安装同步并下载或同步所有文件到本地电脑。

或者

创建一个新驱动器并共享到该驱动器所需的文件,然后使用谷歌驱动器同步将此驱动器同步到本地电脑。


0
投票

tl;dr 如果您想下载大文件,例如带有 ID

0B4y35FiV1wh7X2pESGlLREpxdXM
:

// check out the filename
$ curl 'https://drive.usercontent.google.com/download?id=0B4y35FiV1wh7X2pESGlLREpxdXM&export=download&confirm=t' \
    | htmlq -t '.uc-warning-subcaption'
mecab-jumandic-7.0-20130310.tar.gz (29M) is too large for Google to scan for viruses. Would you still like to download this file?

// download the file
$ curl 'https://drive.usercontent.google.com/download?id=0B4y35FiV1wh7X2pESGlLREpxdXM&export=download&confirm=t' \
    -o mecab-jumandic-7.0-20130310.tar.gz

假设您要下载 id 为

0B4y35FiV1wh7MWVlSDBCSXZMTXM
的文件。它足够小,这会起作用:

$ curl 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM' \
    -LOJ

-L
使其遵循重定向(这里有一个重定向),
-O
使其输出对文件的响应,并使用 url 中的路径的基本名称作为文件名(在本例中为
uc
) ),
-J
使
-O
使用服务器返回的
Content-Disposition
标头中的文件名(如果返回了此类标头)。

但是使用

0B4y35FiV1wh7X2pESGlLREpxdXM
是行不通的,因为 Google 不会扫描大文件是否有病毒,而是希望您确认是否确实要下载该文件。

让我们一步一步来做:

$ curl 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7X2pESGlLREpxdXM' \
    -sSw '%header{location}' -o /dev/null
https://drive.usercontent.google.com/download?id=0B4y35FiV1wh7X2pESGlLREpxdXM&export=download

-s
- 保持沉默(不显示进度表或错误消息),
-S
- 使
-s
仅隐藏进度表,
-w '%header{location}'
- 输出
Location
标题,
-o /dev/null
- 丢弃响应正文。

$ curl 'https://drive.usercontent.google.com/download?id=0B4y35FiV1wh7X2pESGlLREpxdXM&export=download' \
    -sSOJw '%header{content-disposition}'

服务器没有返回

Content-Disposition
标头,因此响应保存在
download
:

$ cat download | htmlq -t '.uc-warning-subcaption'
mecab-jumandic-7.0-20130310.tar.gz (29M) is too large for Google to scan for viruses. Would you still like to download this file?

htmlq
类为
-t
的标签的输出文本 (
uc-warning-subcaption
)。

那里有一个表格:

$ cat download | htmlq -p form
<form action="https://drive.usercontent.google.com/download" id="download-form" method="get">
    <input class="goog-inline-block jfk-button jfk-button-action" id="uc-download-link" type="submit" value="Download anyway">
    <input name="id" type="hidden" value="0B4y35FiV1wh7X2pESGlLREpxdXM">
    <input name="export" type="hidden" value="download">
    <input name="confirm" type="hidden" value="t">
    <input name="uuid" type="hidden" value="158cc63f-3a8a-47b3-827f-c74bcaa04d16">
</form>

htmlq
输出
form
标签并对输出进行美化(
-p
)。

所以它就像最后一个 url +

confirm
uuid
字段。并且
uuid
会随着每个请求而变化。不过好像没有必要,只需要加上
confirm=t
:

就可以了
$ curl 'https://drive.usercontent.google.com/download?id=0B4y35FiV1wh7X2pESGlLREpxdXM&export=download&confirm=t' \
    -o mecab-jumandic-7.0-20130310.tar.gz
© www.soinside.com 2019 - 2024. All rights reserved.