从谷歌驱动器wget / curl大文件

时间:2014-07-29 07:39:38

标签: curl google-drive-api wget google-docs

我试图在脚本中从谷歌驱动器下载文件,我在这方面遇到了一些麻烦。我尝试下载的文件是here

我已经广泛地在线查看了,我终于设法让其中一个下载了。我得到了文件的UID和较小的(1.6MB)下载,但是较大的文件(3.7GB)总是重定向到一个页面,询问我是否要在没有病毒扫描的情况下继续下载。有人可以帮助我通过那个屏幕吗?

这是我如何让第一个文件正常工作 -

curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYeDU0VDRFWG9IVUE" > phlat-1.0.tar.gz

当我在另一个文件上运行相同的文件时,

curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM" > index4phlat.tar.gz

我得到以下输出 - enter image description here

我注意到链接中的倒数第三行,&confirm=JwkK是一个随机的4个字符的字符串,但建议可以在我的网址上添加确认信息。我访问过的其中一个链接建议&confirm=no_antivirus,但这不起作用。

我希望有人可以帮忙解决这个问题!

提前致谢。

39 个答案:

答案 0 :(得分:165)

我编写了一个Python代码段,可以从Google云端硬盘下载文件,并提供可共享链接。它有效,截至2017年8月

剪辑不使用 gdrive ,也不使用Google Drive API。它使用requests模块。

从Google云端硬盘下载大型文件时,单个GET请求是不够的。需要第二个,这个名为 confirm 的额外URL参数,其值应等于某个cookie的值。

import requests

def download_file_from_google_drive(id, destination):
    def get_confirm_token(response):
        for key, value in response.cookies.items():
            if key.startswith('download_warning'):
                return value

        return None

    def save_response_content(response, destination):
        CHUNK_SIZE = 32768

        with open(destination, "wb") as f:
            for chunk in response.iter_content(CHUNK_SIZE):
                if chunk: # filter out keep-alive new chunks
                    f.write(chunk)

    URL = "https://docs.google.com/uc?export=download"

    session = requests.Session()

    response = session.get(URL, params = { 'id' : id }, stream = True)
    token = get_confirm_token(response)

    if token:
        params = { 'id' : id, 'confirm' : token }
        response = session.get(URL, params = params, stream = True)

    save_response_content(response, destination)    


if __name__ == "__main__":
    import sys
    if len(sys.argv) is not 3:
        print("Usage: python google_drive.py drive_file_id destination_file_path")
    else:
        # TAKE ID FROM SHAREABLE LINK
        file_id = sys.argv[1]
        # DESTINATION FILE ON YOUR DISK
        destination = sys.argv[2]
        download_file_from_google_drive(file_id, destination)

答案 1 :(得分:63)

您可以使用开源Linux / Unix命令行工具gdrive

要安装它:

  1. Download二进制文件。选择适合您架构的版本,例如gdrive-linux-x64

  2. 将其复制到您的路径。

    sudo cp gdrive-linux-x64 /usr/local/bin/gdrive;
    sudo chmod a+x /usr/local/bin/gdrive;
    
  3. 使用它:

    1. 确定Google云端硬盘文件ID。为此,右键单击Google云端硬盘网站中的所需文件,然后选择“获取链接...”。它将返回https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H之类的内容。获取?id=后面的字符串并将其复制到剪贴板。这是文件的ID。

    2. 下载文件。当然,请在以下命令中使用您的文件ID。

      gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
      
    3. 首次使用时,该工具需要获取对Google Drive API的访问权限。为此,它会显示一个您必须在浏览器中访问的链接,然后您将获得一个验证码,以便复制并粘贴回该工具。然后下载自动开始。没有进度指示器,但您可以在文件管理器或第二个终端中观察进度。

      来源: A comment by Tobi此处有另一个答案。

      其他技巧:限速。要以有限的最高费率下载gdrive(不要淹没网络...),您可以使用这样的命令({{1} }是PipeViewer):

      pv

      这将显示下载的数据量(gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \ pv -br -L 90k | \ cat > file.ext )和下载速度(-b),并将该速率限制为90 kiB / s(-r)。

答案 2 :(得分:58)

2019年5月

file_id应该看起来像0Bz8a_Dbh9QhbNU3SGlFaDg

您可以通过右键单击该文件然后获取可共享链接来获取该文件。在开放访问文件上测试。我不确定它是否适用于目录。 在Google Colab上测试。

答案 3 :(得分:48)

看一下这个问题:Direct download from Google Drive using Google Drive API

基本上,您必须创建一个公共目录,并通过相对引用访问您的文件,例如

wget https://googledrive.com/host/LARGEPUBLICFOLDERID/index4phlat.tar.gz

警告:不推荐使用此功能。请参阅以下评论中的警告。

或者,您可以使用此脚本:https://github.com/circulosmeos/gdown.pl

答案 4 :(得分:44)

curl -Lb /tmp/gcokie "https://drive.google.com/uc?export=download&confirm=Uq6r&id=0B5IRsLTwEO6CVXFURmpQZ1Jxc0U" -o "SomeBigFile.zip"

它是如何工作的?
用curl获取cookie文件和html代码 将html管道输入grep和sed并搜索文件名 使用awk从cookie文件中获取确认代码 最后下载启用了cookie的文件,确认代码和文件名。

curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" >/dev/null  
getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)"  
curl -LOJb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}" 

如果你不需要文件名变量curl可以猜测它 -L遵循重定向
-O远程名称
-J Remote-header-name

echo "gURL" | egrep -o '(\w|-){26,}'  
# match more than 26 word characters  

要从您可以使用的URL中提取Google文件ID:

echo "gURL" | sed 's/[^A-Za-z0-9_-]/\n/g' | sed -rn '/.{26}/p'  
# replace non-word characters with new line,   
# print only line with more than 26 word characters 

OR

jQuery(document).ready(function($) {
  $('.exampleimg').click(function() {
    $('.about').hide(600);
    if (($(window).width() > 670) && ($(this).hasClass('exampleimgopen'))) {
      $(this).removeClass('exampleimgopen');
    } else if ($(window).width() > 670) {
      $('.exampleimg').removeClass('exampleimgopen');
      $(this).addClass('exampleimgopen');
    }
  });
});

jQuery(document).ready(function($) {
  $('.exampleimg').click(function() {
    $('.about').hide(600);
    if (($(window).width() < 670) && ($(this).hasClass('exampleimgopen2'))) {
      $(this).removeClass('exampleimgopen2');
    } else if ($(window).width() < 670) {
      $('.exampleimg').removeClass('exampleimgopen2');
      $(this).addClass('exampleimgopen2');
    }
  });
});

jQuery(document).ready(function($) {
  $('.exampleimg').click(function() {
    $('.about').hide(600);
    if (($(window).width() < 540) && ($(this).hasClass('exampleimgopen3'))) {
      $(this).removeClass('exampleimgopen3');
    } else if ($(window).width() < 540) {
      $('.exampleimg').removeClass('exampleimgopen3');
      $(this).addClass('exampleimgopen3');
    }
  });
});

答案 5 :(得分:29)

截至2018年3月更新。

我尝试了其他答案中提供的各种技术,将我的文件(6 GB)直接从Google驱动器下载到我的AWS ec2实例,但它们都不起作用(可能是因为它们已经老了)。

因此,对于其他人的信息,以下是我成功的方法:

  1. 右键单击要下载的文件,单击“共享”,在“链接共享”部分下,选择“具有此链接的任何人都可以编辑”。
  2. 复制链接。它应采用以下格式:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. 从链接中复制FILEIDENTIFIER部分。
  4. 将以下脚本复制到文件中。它使用curl并处理cookie以自动下载文件。

    #!/bin/bash
    fileid="FILEIDENTIFIER"
    filename="FILENAME"
    curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null
    curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}
    
  5. 如上所示,将FILEIDENTIFIER粘贴到脚本中。记得保留双引号!

  6. 提供文件的名称以代替FILENAME。请记住保留双引号并在FILENAME中包含扩展名(例如,myfile.zip)。
  7. 现在,通过在终端sudo chmod +x download-gdrive.sh中运行此命令来保存文件并使文件可执行。
  8. 使用`./download-gdrive.sh“运行脚本。
  9. PS:这是上面给出的脚本的Github要点:https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424

答案 6 :(得分:24)

google drive的默认行为是扫描文件中的病毒,如果文件太大,它会提示用户并通知他无法扫描文件。

目前,我找到的唯一解决方法是与网络共享文件并创建网络资源。

来自google drive帮助页面的引用:

借助云端硬盘,您可以制作网络资源(如HTML,CSS和Javascript文件) - 可以在网站上查看。

使用云端硬盘来托管网页:

  
      
  1. 在drive.google.com上打开云端硬盘并选择一个文件。
  2.   
  3. 点击页面顶部的分享按钮。
  4.   
  5. 点击共享框右下角的高级
  6.   
  7. 点击更改....
  8.   
  9. 选择开启 - 在网络上公开,然后点击保存
  10.   
  11. 在关闭共享框之前,请在“链接到共享”下方字段中的URL中复制文档ID。文档ID是一个由大写和小写字母组成的字符串,以及URL中斜杠之间的数字。
  12.   
  13. 分享看起来像“www.googledrive.com/host/[doc id”的网址,其中[doc id]被您在步骤6中复制的文档ID替换。
      任何人都可以查看您的网页。
  14.   

在此处找到:https://support.google.com/drive/answer/2881970?hl=en

因此,例如,当您在Google云端硬盘上公开共享文件时,共享链接如下所示:

https://drive.google.com/file/d/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U/view?usp=sharing

然后复制文件ID并创建一个googledrive.com linke,如下所示:

https://www.googledrive.com/host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U

答案 7 :(得分:22)

2020年9月

  • 首先,从Google驱动器中提取所需文件的ID:

    1. 在浏览器中,导航至drive.google.com。

    2. 右键单击文件,然后单击“获取共享链接”

      Right click get shareable link

    3. 然后从URL中提取文件的ID:

      enter image description here

  • 接下来,使用gdown安装pip PyPI模块:

    pip install gdown

  • 最后,使用gdown和预期的ID下载文件:

    gdown --id <put-the-ID>


[注意]:

  • google-colab 中,您必须在!命令之前使用bash
    (即!gdown --id 1-1wAx7b-USG0eQwIBVwVDUl3K1_1ReCt

答案 8 :(得分:17)

这是一种快速的方法。

确保链接是共享的,它看起来像这样:

https://drive.google.com/open?id=FILEID&authuser=0

然后,复制该FILEID并像这样使用它

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

答案 9 :(得分:9)

简单方法:

(如果您只需要一次性下载)

  1. 转到包含下载链接
  2. 的Google云端硬盘网页
  3. 打开浏览器控制台并转到“网络”标签
  4. 点击下载链接
  5. 等待文件开始下载,找到相应的请求(应该是列表中的最后一个),然后就可以取消下载了
  6. 右键单击请求,然后单击“复制为cURL”(或类似)
  7. 你应该得到类似的东西:

    > my-file-name.extension

    在你的控制台中过去它,将Betta <- c(1,12,23,20) dim(Betta) <- c(2,2) dimnames(Betta) <- list(Temperature = c("28", "25"), Flare = c("Yes", "No")) mosaicplot(x = Betta, main = "Title") 添加到最后(否则它会将文件写入你的控制台),然后按回车:)

答案 10 :(得分:9)

根据Roshan Sethia的回答

2018年5月

使用 WGET

  1. 创建一个名为wgetgdrive.sh的shell脚本,如下所示:

    Stream
  2. 授予执行脚本的正确权限

  3. 在终端中,运行:

    #!/bin/bash
    
    # Get files from Google Drive
    
    # $1 = file ID
    # $2 = file name
    
    URL="https://docs.google.com/uc?export=download&id=$1"
    
    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 $URL -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=$1" -O $2 && rm -rf /tmp/cookies.txt
    

    例如:

    ./wgetgdrive.sh <file ID> <filename>
    

答案 11 :(得分:8)

上述答案在2020年4月之前已经过时,因为Google驱动器现在使用重定向到文件的实际位置。

从2020年4月开始在macOS 10.15.4上处理公共文档:

# this is used for drive directly downloads
function download-google(){
  echo "https://drive.google.com/uc?export=download&id=$1"
  mkdir -p .tmp
  curl -c .tmp/$1cookies "https://drive.google.com/uc?export=download&id=$1" > .tmp/$1intermezzo.html;
  curl -L -b .tmp/$1cookies "$(egrep -o "https.+download" .tmp/$1intermezzo.html)" > $2;
}

# some files are shared using an indirect download
function download-google-2(){
  echo "https://drive.google.com/uc?export=download&id=$1"
  mkdir -p .tmp
  curl -c .tmp/$1cookies "https://drive.google.com/uc?export=download&id=$1" > .tmp/$1intermezzo.html;
  code=$(egrep -o "confirm=(.+)&amp;id=" .tmp/$1intermezzo.html | cut -d"=" -f2 | cut -d"&" -f1)
  curl -L -b .tmp/$1cookies "https://drive.google.com/uc?export=download&confirm=$code&id=$1" > $2;
}

# used like this
download-google <id> <name of item.extension>

答案 12 :(得分:6)

2016年12月source)中,没有答案提出对我有用的内容:

$Script:PathStack = New-Object -TypeName 'System.Collections.Generic.Stack[System.Management.Automation.PathInfo]';

如果Google Drive文件已与拥有该链接的人共享,curl -L https://drive.google.com/uc?id={FileID} 是共享网址中{FileID}后面的字符串。

虽然我没有查看大文件,但我相信知道它可能会有用。

答案 13 :(得分:5)

我在使用Google云端硬盘时遇到了同样的问题。

以下是我使用链接2 解决问题的方法。

  1. 在您的PC上打开浏览器,导航到Google云端硬盘中的文件。为您的文件提供公共链接。

  2. 将公共链接复制到剪贴板(例如右键单击,复制链接地址)

  3. 打开终端。如果您要下载到另一台PC /服务器/机器,则应该通过SSH连接到它

  4. 安装链接2(debian / ubuntu方法,使用你的发行版或操作系统等价物)

    sudo apt-get install links2

  5. 将链接粘贴到终端并使用链接打开,如下所示:

    links2 "paste url here"

  6. 使用箭头键导航至链接中的下载链接,然后按 Enter

  7. 选择文件名,然后下载文件

答案 14 :(得分:5)

-已更新-

要首先下载文件,请从此处获取youtube-dl软件包:

youtube-dl:https://rg3.github.io/youtube-dl/download.html

或使用pip安装它:

sudo python2.7 -m pip install --upgrade youtube_dl /// sudo python3.6 -m pip install --upgrade youtube_dl

更新:

我刚发现这个:

  1. 右键单击要从drive.google.com下载的文件

  2. 点击Get Sharable link

  3. 切换到Link sharing on

  4. 单击Sharing settings

  5. 单击顶部的下拉列表中的选项

  6. 单击更多

  7. 选择[x] On - Anyone with a link

  8. 复制链接

https://drive.google.com/file/d/3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR/view?usp=sharing       
(This is not a real file address)

https://drive.google.com/file/d/之后复制ID:

3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR

将其粘贴到命令行中:

youtube-dl https://drive.google.com/open?id=

将ID粘贴在open?id=后面

youtube-dl https://drive.google.com/open?id=3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
[GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Downloading webpage
[GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Requesting source file
[download] Destination: your_requested_filename_here-3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
[download] 240.37MiB at  2321.53MiB/s (00:01)

希望有帮助

答案 15 :(得分:4)

从Google驱动器下载文件的简便方法,也可以在colab上下载文件

pip install gdown

import gdown

然后

url = 'https://drive.google.com/uc?id=0B9P1L--7Wd2vU3VUVlFnbTgtS2c'
output = 'spam.txt'
gdown.download(url, output, quiet=False)

fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c'

gdown https://drive.google.com/uc?id=+fileid

文档https://pypi.org/project/gdown/

答案 16 :(得分:4)

这是一个开源的多平台客户端,用Go:drive编写。它功能齐全,功能齐全,而且还在积极开发中。

$ drive help pull
Name
        pull - pulls remote changes from Google Drive
Description
        Downloads content from the remote drive or modifies
         local content to match that on your Google Drive

Note: You can skip checksum verification by passing in flag `-ignore-checksum`

* For usage flags: `drive pull -h`

答案 17 :(得分:4)

使用youtube-dl

MainViewController()

您还可以传递youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890 以获得直接下载URL。

答案 18 :(得分:3)

这是我写的一个小bash脚本,今天完成了这项工作。它适用于大文件,也可以恢复部分提取的文件。它有两个参数,第一个是file_id,第二个是输出文件的名称。这里对以前的答案的主要改进是它适用于大型文件,只需要常用的工具:bash,curl,tr,grep,du,cut和mv。

#!/usr/bin/env bash
fileid="$1"
destination="$2"

# try to download the file
curl -c /tmp/cookie -L -o /tmp/probe.bin "https://drive.google.com/uc?export=download&id=${fileid}"
probeSize=`du -b /tmp/probe.bin | cut -f1`

# did we get a virus message?
# this will be the first line we get when trying to retrive a large file
bigFileSig='<!DOCTYPE html><html><head><title>Google Drive - Virus scan warning</title><meta http-equiv="content-type" content="text/html; charset=utf-8"/>'
sigSize=${#bigFileSig}

if (( probeSize <= sigSize )); then
  virusMessage=false
else
  firstBytes=$(head -c $sigSize /tmp/probe.bin)
  if [ "$firstBytes" = "$bigFileSig" ]; then
    virusMessage=true
  else
    virusMessage=false
  fi
fi

if [ "$virusMessage" = true ] ; then
  confirm=$(tr ';' '\n' </tmp/probe.bin | grep confirm)
  confirm=${confirm:8:4}
  curl -C - -b /tmp/cookie -L -o "$destination" "https://drive.google.com/uc?export=download&id=${fileid}&confirm=${confirm}"
else
  mv /tmp/probe.bin "$destination"
fi

答案 19 :(得分:3)

此作品截至2017年11月 https://gist.github.com/ppetraki/258ea8240041e19ab258a736781f06db

#!/bin/bash

SOURCE="$1"
if [ "${SOURCE}" == "" ]; then
    echo "Must specify a source url"
    exit 1
fi

DEST="$2"
if [ "${DEST}" == "" ]; then
    echo "Must specify a destination filename"
    exit 1
fi

FILEID=$(echo $SOURCE | rev | cut -d= -f1 | rev)
COOKIES=$(mktemp)

CODE=$(wget --save-cookies $COOKIES --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=${FILEID}" -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/Code: \1\n/p')

# cleanup the code, format is 'Code: XXXX'
CODE=$(echo $CODE | rev | cut -d: -f1 | rev | xargs)

wget --load-cookies $COOKIES "https://docs.google.com/uc?export=download&confirm=${CODE}&id=${FILEID}" -O $DEST

rm -f $COOKIES

答案 20 :(得分:3)

替代方法,2020

适用于无头服务器。我试图下载一个〜200GB的私人文件,但无法使用此线程中提到的其他任何方法。

解决方案

  1. (如果文件已经在您自己的google驱动器中,则跳过此步骤)将要从公用/共享文件夹下载的文件复制到您的Google云端硬盘帐户中。 选择文件->右键单击->制作副本

Demo Make a copy

  1. 安装和设置Rclone (一种开源命令行工具),以在本地存储和Google云端硬盘之间同步文件。 a quick tutorial到这里为Google云端硬盘安装和设置rclone。

  2. 使用Rclone将文件从Google云端硬盘复制到计算机上

rclone copy mygoogledrive:path/to/file /path/to/file/on/local/machine -P

-P参数有助于跟踪下载进度,并在下载完成时通知您。

答案 21 :(得分:3)

最简单的方法是:

  1. 创建download link并复制文件ID
  2. 使用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=FILEID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt

答案 22 :(得分:3)

我无法让Nanoix的perl脚本工作,或者我见过的其他curl示例,所以我开始在python中查看api。这适用于小文件,但是大文件在可用的ram中窒息,所以我发现了一些其他很好的分块代码,它们使用了api的部分下载功能。请点击这里: https://gist.github.com/csik/c4c90987224150e4a0b2

请注意将client_secret json文件从API接口下载到本地目录。

来源
$ cat gdrive_dl.py
from pydrive.auth import GoogleAuth  
from pydrive.drive import GoogleDrive    

"""API calls to download a very large google drive file.  The drive API only allows downloading to ram 
   (unlike, say, the Requests library's streaming option) so the files has to be partially downloaded
   and chunked.  Authentication requires a google api key, and a local download of client_secrets.json
   Thanks to Radek for the key functions: http://stackoverflow.com/questions/27617258/memoryerror-how-to-download-large-file-via-google-drive-sdk-using-python
"""

def partial(total_byte_len, part_size_limit):
    s = []
    for p in range(0, total_byte_len, part_size_limit):
        last = min(total_byte_len - 1, p + part_size_limit - 1)
        s.append([p, last])
    return s

def GD_download_file(service, file_id):
  drive_file = service.files().get(fileId=file_id).execute()
  download_url = drive_file.get('downloadUrl')
  total_size = int(drive_file.get('fileSize'))
  s = partial(total_size, 100000000) # I'm downloading BIG files, so 100M chunk size is fine for me
  title = drive_file.get('title')
  originalFilename = drive_file.get('originalFilename')
  filename = './' + originalFilename
  if download_url:
      with open(filename, 'wb') as file:
        print "Bytes downloaded: "
        for bytes in s:
          headers = {"Range" : 'bytes=%s-%s' % (bytes[0], bytes[1])}
          resp, content = service._http.request(download_url, headers=headers)
          if resp.status == 206 :
                file.write(content)
                file.flush()
          else:
            print 'An error occurred: %s' % resp
            return None
          print str(bytes[1])+"..."
      return title, filename
  else:
    return None          


gauth = GoogleAuth()
gauth.CommandLineAuth() #requires cut and paste from a browser 

FILE_ID = 'SOMEID' #FileID is the simple file hash, like 0B1NzlxZ5RpdKS0NOS0x0Ym9kR0U

drive = GoogleDrive(gauth)
service = gauth.service
#file = drive.CreateFile({'id':FILE_ID})    # Use this to get file metadata
GD_download_file(service, FILE_ID) 

答案 23 :(得分:2)

以下是解决方法,我将文件从Google云端硬盘下载到我的Google Cloud Linux shell。

  1. 使用高级共享将文件共享给PUBLIC并使用“编辑”权限。
  2. 您将获得一个具有ID的共享链接。看到链接: - drive.google.com/file/d/ [ID] /视图?USP =共享
  3. 复制该ID并将其粘贴到以下链接中: -
  4. googledrive.com/host/ [ID]

    1. 以上链接将是我们的下载链接。
    2. 使用wget下载文件: -
    3. wget https://googledrive.com/host/[ID]

      1. 此命令将下载名称为[ID]的文件,该文件没有扩展名,但在运行wget命令的同一位置具有相同的文件大小。
      2. 实际上,我在练习中下载了一个压缩文件夹。所以我使用: -
      3. 重命名了那个笨拙的文件

        mv [ID] 1.zip

        1. 然后使用
        2. 解压缩1.zip

          我们将获取文件。

答案 24 :(得分:2)

弄乱了这个垃圾之后。我找到了一种使用chrome-开发人员工具下载我的甜蜜文件的方法。

  1. 在您的google docs标签上,点击Ctr + Shift + J(设置->开发人员工具)
  2. 切换到“网络”标签
  3. 在您的docs文件中,单击“下载”->以CSV,xlsx等格式下载。...
  4. 它将在“网络”控制台中向您显示请求 enter image description here

  5. 右键单击->复制->复制为卷发

  6. 您的Curl命令将如下所示,并添加https://opendata.fcc.gov/resource/sr6c-syda.json?$where=id > 3205415&$$app_token=token以创建导出的文件。 -o

解决了!

答案 25 :(得分:1)

我一直在使用@ Amit Chahar的curl片段,后者在此线程中发布了不错的answer。我发现它很有用 将其放入bash函数而不是单独的.sh文件

function curl_gdrive {

    GDRIVE_FILE_ID=$1
    DEST_PATH=$2

    curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${GDRIVE_FILE_ID}" > /dev/null
    curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${GDRIVE_FILE_ID}" -o ${DEST_PATH}
    rm -fr cookie
}

可以包含在~/.bashrc中(如果不是自动获得,则可以自动获取)并以以下方式使用

   $ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar

答案 26 :(得分:1)

2020年7月-Windows用户批处理文件解决方案

我想为Windows用户添加一个简单的批处理文件解决方案,因为我只找到了Linux解决方案,花了几天的时间来学习所有有关为Windows创建解决方案的知识。因此,要从其他可能需要它的人那里保存这项工作,就在这里。

您需要的工具

    Windows的
  1. wget(小的5KB exe程序,无需安装) 从这里下载。 https://eternallybored.org/misc/wget/

  2. Windows的
  3. jrepl(小的117KB批处理文件程序,无需安装) 该工具类似于linux sed工具。 从这里下载: https://www.dostips.com/forum/viewtopic.php?t=6044

假设

%filename%-要将下载文件保存到的文件名。
%fileid%=谷歌文件ID(如前所述)

用于从Google云端硬盘下载小文件的批处理代码

wget -O "%filename%" "https://docs.google.com/uc?export=download&id=%fileid%"        

用于从Google云端硬盘下载大文件的批处理代码

set cookieFile="cookie.txt"
set confirmFile="confirm.txt"
   
REM downlaod cooky and message with request for confirmation
wget --quiet --save-cookies "%cookieFile%" --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=%fileid%" -O "%confirmFile%"
   
REM extract confirmation key from message saved in confirm file and keep in variable resVar
jrepl ".*confirm=([0-9A-Za-z_]+).*" "$1" /F "%confirmFile%" /A /rtn resVar
   
REM when jrepl writes to variable, it adds carriage return (CR) (0x0D) and a line feed (LF) (0x0A), so remove these two last characters
set confirmKey=%resVar:~0,-2%
   
REM download the file using cookie and confirmation key
wget --load-cookies "%cookieFile%" -O "%filename%" "https://docs.google.com/uc?export=download&id=%fileid%&confirm=%confirmKey%"
   
REM clear temporary files 
del %cookieFile%
del %confirmFile%

答案 27 :(得分:1)

有一种更简单的方法。

从firefox / chrome扩展名安装cliget / CURLWGET。

从浏览器下载文件。这将创建一个curl / wget链接,该链接可以记住下载文件时使用的cookie和标头。从任何外壳使用此命令进行下载

答案 28 :(得分:1)

您只需要将wget与以下项一起使用:

void makeVisible(TextMesh mesh)
{
    Color zm;
    zm = mesh.color;

    while (zm.a <= 255)
    {
        zm.a += 1 * Time.deltaTime;
        mesh.color = zm;
    }
}

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("RoomDescriptions"))
    {
        //TextMesh temp;
        switch (other.gameObject.name)
        {
            case "Bed":
                makeVisible(bed);
                break;
            case "Paper2":
                break;
            case "Mar Desk":
                break;
            case "Table_Bottom":
                break;
            default:
                break;
        }
    }
}

PD。该文件必须是公开的。

答案 29 :(得分:1)

2018年5月工作

您好基于此评论...我创建了一个bash,用于将文件 URLS.txt 中的网址列表导出到 URLS_DECODED.txt 用于像flashget这样的加速器(我使用cygwin来组合windows&amp; linux)

引入了命令蜘蛛以避免下载并获得最终链接(直接)

命令GREP HEAD和CUT,处理并获得最终链接,基于西班牙语,也许你可以移植到英语语言

echo -e "$URL_TO_DOWNLOAD\r"可能\ r \ n只是cywin,必须替换为\ n(断行)

**********user***********是用户文件夹

*******Localización***********是西班牙语,清除星号,让英语中的单词定位并调整HEAD和CUT数字以适应方法。

rm -rf /home/**********user***********/URLS_DECODED.txt
COUNTER=0
while read p; do 
    string=$p
    hash="${string#*id=}"
    hash="${hash%&*}"
    hash="${hash#*file/d/}"
    hash="${hash%/*}"
    let COUNTER=COUNTER+1
    echo "Enlace "$COUNTER" id="$hash
    URL_TO_DOWNLOAD=$(wget --spider --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='$hash -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id="$hash 2>&1 | grep *******Localización***********: | head -c-13 | cut -c16-)
    rm -rf /tmp/cookies.txt
    echo -e "$URL_TO_DOWNLOAD\r" >> /home/**********user***********/URLS_DECODED.txt
    echo "Enlace "$COUNTER" URL="$URL_TO_DOWNLOAD
done < /home/**********user***********/URLS.txt

答案 30 :(得分:1)

我找到了一个有效的解决方案...只需使用以下

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=1HlzTR1-YVoBPlXo0gMFJ_xY4ogMnfzDi' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1HlzTR1-YVoBPlXo0gMFJ_xY4ogMnfzDi" -O besteyewear.zip && rm -rf /tmp/cookies.txt

答案 31 :(得分:0)

2020年11月

如果您更喜欢使用bash脚本,那么这对我有用: (5Gb文件,公开可用)

#!/bin/bash
if [ $# != 2 ]; then
echo "Usage: googledown.sh ID save_name"
exit 0
fi
confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id='$1 -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')
echo $confirm
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$confirm&id=$1" -O $2 && rm -rf /tmp/cookies.txt

答案 32 :(得分:0)

仅使用Google Drive API的解决方案

在运行下面的代码之前,您必须激活Google Drive API,安装依赖项并使用您的帐户进行身份验证。可以在原始的Google Drive API guide page

上找到说明
spinSubKind

答案 33 :(得分:0)

以上所有回答似乎都掩盖了答案的简单性,或者有些细微之处未解释。

如果文件是公共共享的,则只需知道文件ID,即可生成直接下载链接。 URL的格式必须为“ https://drive.google.com/uc?id=[FILEID]&export=download”,此日期自2019年11月22日起生效。这不要求接收者登录google,但要求文件公开共享。

  1. 在浏览器中,导航至drive.google.com。

  2. 右键单击文件,然后单击“获取共享链接”

Right click get shareable link

  1. 打开一个新标签页,选择地址栏,然后粘贴剪贴板内容(将成为共享链接)。您会看到Google查看器显示的文件。 ID是URL的“查看”部分正前方的数字:

enter image description here

  1. 编辑URL,使其具有以下格式,将“ [FILEID]”替换为共享文件的ID:

    https://drive.google.com/uc?id=[FILEID]&export=download

  2. 这是您的直接下载链接。现在,如果在浏览器中单击它,文件将被“推送”到浏览器中,打开下载对话框,您可以保存或打开文件。您也可以在下载脚本中使用此链接。

  3. 因此等效的curl命令为:

curl -L "https://drive.google.com/uc?id=AgOATNfjpovfFrft9QYa-P1IeF9e7GWcH&export=download" > phlat-1.0.tar.gz

答案 34 :(得分:0)

我使用python脚本和Google驱动器api完成了此操作, 您可以尝试以下代码段:

//using chunk download

file_id = 'someid'
request = drive_service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
    status, done = downloader.next_chunk()
    print "Download %d%%." % int(status.progress() * 100)

答案 35 :(得分:0)

获取共享链接并以隐身方式打开它(非常重要)。 它将说它无法扫描。

打开检查器并跟踪网络流量。 点击“仍然下载”按钮。

复制上次请求的网址。 这是您的链接。在wget中使用它。

答案 36 :(得分:0)

2018年5月

如果您想使用curl从Google云端硬盘下载文件,除了驱动器中的文件ID外,您还需要一个适用于Google云端硬盘API的OAuth2 access_token。获取令牌涉及Google API框架的几个步骤。 Google的注册步骤(目前)是免费的。

OAuth2 access_token可能允许各种活动,因此请小心。此外,令牌在短时间内超时(1小时?)但不足以防止滥用,如果有人抓住它。

一旦你有了access_token和fileid,这将有效:

AUTH="Authorization: Bearer the_access_token_goes_here"
FILEID="fileid_goes_here"
URL=https://www.googleapis.com/drive/v3/files/$FILEID?alt=media
curl --header "$AUTH" $URL >myfile.ext

另请参阅:Google Drive APIs -- REST -- Download Files

答案 37 :(得分:0)

skicka是一个cli工具,用于从Google驱动器上传,下载访问文件。

示例 -

skicka download /Pictures/2014 ~/Pictures.copy/2014
10 / 10 [=====================================================] 100.00 % 
skicka: preparation time 1s, sync time 6s
skicka: updated 0 Drive files, 10 local files
skicka: 0 B read from disk, 16.18 MiB written to disk
skicka: 0 B uploaded (0 B/s), 16.18 MiB downloaded (2.33 MiB/s)
skicka: 50.23 MiB peak memory used

答案 38 :(得分:-3)

最简单的方法是在文件夹中放置您想要下载的内容。共享该文件夹,然后从URL栏中获取文件夹ID。

然后转到https://googledrive.com/host/[ID](用您的文件夹ID替换ID) 您应该看到该文件夹​​中所有文件的列表,单击要下载的文件。然后下载应该访问您的下载页面(Chrome上的Ctrl + J),然后您想要复制下载链接然后使用 wget“下载链接”

享受:)