LITTLEFOX

Simple & Naïve

使用wget从Google Drive下载文件

Google Drive(谷歌开车???)是国外非常常用的网盘,有时候我们需要把Google Drive的文件下载到小鸡上,但是直接用wget后面跟下载链接是行不通的,这时候应该怎么办呢?

首先最简单粗暴的方法是用浏览器下载到本地再上传到小鸡,但是对于大文件这样流量和时间是很伤不起的;然后是非官方的Google Drive客户端,github上一大把,如果你常用的话是可以的,但是用来下载单个文件还是很麻烦;那么我们能不能直接用wget下载Google Drive的直链呢?

《使用wget从Google Drive下载文件》

可以的!首先你要有一个Google Drive分享链接,我们知道Google Drive的分享链接是这样的格式:

https://docs.google.com/open?id=<ID>

知道了ID,就可以用wget来下载了,只需要转换一下链接格式:

$  wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=<ID>' -O <FILENAME>

把其中的<ID>和<FILENAME>替换成分享ID和文件名,就可以下载了。

不过有的时候呢,这样还是会报错,因为Google对于较大的文件,下载前是需要确认的,这个确认的过程我理解是会生成一个cookies,然后浏览器把cookies传递给下载器(或者浏览器内置),我们就可以愉快地下载了,但是通过wget直接下载并不生成cookies,所以就下不下来咯。那么生成cookies这一步可以用wget实现么?当然可以啦,只不过命令稍微长一点:

$ wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=<ID>' -O- | sed -rn 's/.confirm=([0-9A-Za-z_]+)./\1\n/p')&id=<ID>" -O <FILENAME> && rm -rf /tmp/cookies.txt

经常用的话,可以写成function放到aliases里,参看这里。更多信息可以参考这个讨论

另外还有一个获取链接的方法,我没有测试,理论上应该可行。Firefox有个插件叫cliget,可以在扩展中心找到,这个东西的作用是把你正在下载的链接转换成curl wget或者aria2可用的链接,那么可用先在浏览器下载文件,下载过程中用cliget获取wget格式的链接,然后用对应的工具下载即可。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注