wget / enrolar arquivo grande do google drive


306

Estou tentando baixar um arquivo do google drive em um script e estou tendo alguns problemas para fazer isso. Os arquivos que estou tentando baixar estão aqui .

Pesquisei on-line extensivamente e finalmente consegui fazer o download de um deles. Eu obtive os UIDs dos arquivos e o menor (1,6 MB) é bem baixado, mas o arquivo maior (3,7 GB) sempre redireciona para uma página que pergunta se eu quero continuar com o download sem uma verificação de vírus. Alguém poderia me ajudar a superar essa tela?

Veja como consegui o primeiro arquivo funcionando -

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

Quando eu executo o mesmo no outro arquivo,

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

Eu recebo a seguinte saída - insira a descrição da imagem aqui

Percebo na terceira a última linha do link, existe uma &confirm=JwkKque é uma sequência aleatória de 4 caracteres, mas sugere que há uma maneira de adicionar uma confirmação ao meu URL. Um dos links que visitei sugeriu, &confirm=no_antivirusmas não está funcionando.

Espero que alguém aqui possa ajudar com isso!


você pode fornecer o curl scriptque você usou para baixar o arquivo de google drivecomo eu sou incapaz de fazer download de um arquivo de trabalho (imagem) a partir deste roteirocurl -u username:pass https://drive.google.com/open?id=0B0QQY4sFRhIDRk1LN3g2TjBIRU0 >image.jpg
Kasun Siyambalapitiya

Veja a resposta aceita. Eu usei o script gdown.plgdown.pl https://drive.google.com/uc?export=download&confirm=yAjx&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM index4phlat.tar.gz
Arjun

2
Não tenha medo de rolar! Esta resposta fornece um script python muito bom para baixar de uma só vez.
Ciprian Tomoiagă

./gdrive download [FILEID] [--recursivo se for uma pasta], ele solicitará que você acesse um determinado URL e copie e cole um código de token.
Rj4s 23/1118

Respostas:


59

AVISO : Essa funcionalidade está obsoleta. Veja o aviso abaixo nos comentários.


Dê uma olhada nesta pergunta: Download direto do Google Drive usando a API do Google Drive

Basicamente, você precisa criar um diretório público e acessar seus arquivos por referência relativa com algo como

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

Como alternativa, você pode usar este script: https://github.com/circulosmeos/gdown.pl


5
Outra boa maneira é usar a ferramenta de linha de comando do Linux "GDrive" github.com/prasmussen/gdrive
Tobi

1
Consegui usar o script perl do Nanolx em combinação com o link permanente do google drive criado em gdurl.com - Obrigado!
jadik

14
AVISO: O suporte de hospedagem na Web no Google Drive está obsoleto. "A partir de 31 de agosto de 2015, a hospedagem na web no Google Drive para usuários e desenvolvedores será preterida. Os clientes do Google Apps podem continuar usando esse recurso por um período de um ano até 31 de agosto de 2016, ao veicular conteúdo via googledrive.com/host / doc id será descontinuado. " googleappsupdates.blogspot.com/2015/08/…
chrish

9
Infelizmente isso não funciona mais a partir de 2018.
Calimo

2
O gdown.pl também funcionou muito bem para mim. Um rápido olhar para os shows de script não está usando essa API, ele cria um novo URL com um parâmetro export=downloadpara que ele deve ser bom para o futuro próximo, a menos que Google muda esse esquema URL
Ben Baron

233

Junho 2020

O file_iddeve ser algo como 0Bz8a_Dbh9QhbNU3SGlFaDg

Você pode obtê-lo clicando com o botão direito do mouse no arquivo e depois no link Obter compartilhável. Trabalhe apenas em arquivos de acesso aberto (quem tiver um link pode visualizar). Não funciona para diretórios. Testado no Google Colab. Funciona melhor no download de arquivos. Use tar / zip para torná-lo um único arquivo.

Exemplo: para baixar o arquivo leia-me deste diretório

gdown https://drive.google.com/uc?id=0B7EVK8r0v71pOXBhSUdJWU1MYUk

9
Basta remover export=download&a partir gdown https://drive.google.com/uc?export=download&id=your_file_ide ele funciona como charme
Saravanabalagi Ramachandran

8
Este funcionou em julho de 2018! Lembre-se de compartilhar o arquivo e, se você tiver o link como drive.google.com/open?id=FILE_ID, substitua "open" por "uc" e simplesmente gdown drive.google.com/uc?id=FILE_ID
simo23

7
Como podemos baixar uma pasta do Gdrive usando o gdown?
user1

7
Não funciona a partir de agosto de 2019. Erro: "Permissão negada: drive.google.com/uc?id=0B7EVK8r0v71pWEZsZE9oNnFzTm8 Talvez você precise alterar a permissão sobre 'Alguém com o link'?" E é o conjunto de dados CelebA publicamente disponível para download, portanto deve estar ok. Adquiri o link para download clicando em 'obter link compartilhável' e, em seguida, dizia 'compartilhamento de link ativado' e 'qualquer pessoa com o link pode vê-lo'. Portanto, parece que a permissão já foi concedida, mas o erro indica permissão negada. Aqui é o local de acolhimento, se você quiser experimentá-lo: mmlab.ie.cuhk.edu.hk/projects/CelebA.html
Kristof

6
Esta é a única solução da meia dúzia que tentei que funciona. Ele precisa ser votado para o primeiro. Eu só precisava alterar o 'link compartilhado' de: drive.google.com/open?id=XXXX para drive.google.com/uc?id=XXXX
reprovar em

194

Eu escrevi um trecho de código Python que baixa um arquivo do Google Drive, com um link compartilhável . Funciona a partir de agosto de 2017 .

O snippet não usa o gdrive , nem a API do Google Drive. Ele usa o módulo de solicitações .

Ao baixar arquivos grandes do Google Drive, uma única solicitação GET não é suficiente. Um segundo é necessário, e este possui um parâmetro de URL extra chamado confirm , cujo valor deve ser igual ao valor de um determinado 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)

Estou executando o trecho python snippet.py file_id destination. Essa é a maneira correta de executá-lo? Porque se o destino for uma pasta, um erro será exibido. Se eu for resistente a um arquivo e o usar como destino, o trecho parecerá funcionar bem, mas não fará nada.
Manfredo

2
@Manfredo, você precisa do nome do arquivo que deseja salvar, pois, por exemplo, $ python snippet.py your_google_file_id /your/full/path/and/filename.xlsx funcionou para mim. caso isso não funcione, você tem alguma solução? algum arquivo é criado?
Jeff

1
@CiprianTomoiaga Tenho 90% de uma barra de progresso funcionando, usando o módulo tqdm Python. Eu criei uma essência: gist.github.com/joshtch/8e51c6d40b1e3205d1bb2eea18fb57ae . Infelizmente, não encontrei uma maneira confiável de obter o tamanho total do arquivo, necessário para calcular o% de progresso e o tempo estimado de conclusão.
Joshtch

Além disso, que tipo de autenticação o módulo de solicitações usa para acessar o Google Drive? OAuth? Por exemplo, onde no código acima isso é tratado - orders-oauthlib.readthedocs.io/en/latest/… ?
tauseef_CuriousGuy

7
Isso é incrível! Aqui está uma dica para drive_File_ID: https // drive.google.com / file / d / "drive_File_ID" / view - entre https ~~ file / d / e / view do link de download.
Jaeyoung Lee

70

Você pode usar a ferramenta de linha de comando Linux / Unix de código aberto gdrive.

Para instalá-lo:

  1. Faça o download do binário. Escolha aquele que se adapta à sua arquitetura, por exemplogdrive-linux-x64.

  2. Copie-o para o seu caminho.

    sudo cp gdrive-linux-x64 /usr/local/bin/gdrive;
    sudo chmod a+x /usr/local/bin/gdrive;
    

Para usá-lo:

  1. Determine o ID do arquivo do Google Drive. Para isso, clique com o botão direito do mouse no arquivo desejado no site do Google Drive e escolha "Obter link ...". Ele retornará algo como https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H. Obtenha a corda atrás da ?id=e copie-a para a área de transferência. Esse é o ID do arquivo.

  2. Faça o download do arquivo. Obviamente, use o ID do seu arquivo no seguinte comando.

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

Na primeira utilização, a ferramenta precisará obter permissões de acesso à API do Google Drive. Para isso, ele mostrará um link que você deve visitar em um navegador e, em seguida, receberá um código de verificação para copiar e colar na ferramenta. O download é iniciado automaticamente. Não há indicador de progresso, mas você pode observar o progresso em um gerenciador de arquivos ou em um segundo terminal.

Fonte: Um comentário de Tobi sobre outra resposta aqui.

 

Truque adicional: limitação de taxa. Para fazer o download com gdriveuma taxa máxima limitada (para não inverter a rede…), você pode usar um comando como este ( pvé o PipeViewer ):

gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \
  pv -br -L 90k | \
  cat > file.ext

Isso mostrará a quantidade de dados baixados ( -b) e a taxa de download ( -r) e limitará essa taxa a 90 kiB / s ( -L 90k).


Mensagem de erro: "Limite diário para uso não autenticado excedido. O uso continuado requer inscrição.", código: 403
Nianliang

@ Nianliang Ainda não experimentou isso, mas aqui está um palpite: você usou o gdrive para baixar um arquivo acessível ao público, para que ele não solicitasse autenticação no primeiro uso. Tente um arquivo não público primeiro, verifique se a autenticação foi bem-sucedida (conforme descrito na resposta: "No primeiro uso, ..."). Isso ajudou?
tanius

3
Não é possível obter o código de verificação. Obtenha o erro "Faça login com o Google temporariamente desativado para este aplicativo. Este aplicativo ainda não foi verificado pelo Google para usar o Google Sign in".
useranon

1
A mesma mensagem de erro aqui: "Este aplicativo ainda não foi verificado pelo Google para usar o Login do Google".
gebbissimo

1
@useranon: Experimente esta solução: github.com/gdrive-org/gdrive/issues/533#issuecomment-596336395 , você precisa criar uma conta de serviço do Google e compartilhar o arquivo / pasta com este endereço de conta de serviço. Eu fiz isso. Funciona a partir de 17/04/2020!
whyisyoung 17/04

52
ggID='put_googleID_here'  
ggURL='https://drive.google.com/uc?export=download'  
filename="$(curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" | grep -o '="uc-name.*</span>' | sed 's/.*">//;s/<.a> .*//')"  
getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)"  
curl -Lb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}" -o "${filename}"  

Como funciona?
Obter arquivo de cookie e código html com curl.
Canalize o html para grep e sed e procure o nome do arquivo.
Obtenha o código de confirmação do arquivo de cookie com o awk.
Finalmente, faça o download do arquivo com o cookie ativado, confirme o código e o nome do arquivo.

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

Se você não precisa do nome do arquivo, a variável curl pode adivinhar
-L Siga os redirecionamentos
-O Remote-name
-J Remote-header-name

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}" 

Para extrair o ID do arquivo do google da URL, você pode usar:

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

OU

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 

Muito bem feito. Livre-se do aviso de vírus em um arquivo de 5 GB + quando todas as outras respostas falharam.

1
Isso é fantástico. Eu tive que adicionar a --insecureopção a ambos os pedidos de curl para fazê-lo funcionar.
Taylor R

@lapinpt como adiciono a funcionalidade RESUME?
Steven7mwesigwa

De alguma forma, podemos nos livrar do ID do Google se tivermos um link público para o arquivo?
oarfish 11/06/19

42

Atualização em março de 2018.

Tentei várias técnicas fornecidas em outras respostas para baixar meu arquivo (6 GB) diretamente do Google drive para minha instância do AWS ec2, mas nenhuma delas funciona (pode ser porque é antiga).

Então, para informação de outras pessoas, aqui está como eu fiz isso com sucesso:

  1. Clique com o botão direito do mouse no arquivo que deseja baixar, clique em compartilhar, na seção de compartilhamento de links, selecione "qualquer pessoa com este link pode editar".
  2. Copie o link. Deve estar neste formato:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. Copie a parte FILEIDENTIFIER do link.
  4. Copie o script abaixo para um arquivo. Ele usa curl e processa o cookie para automatizar o download do arquivo.

    #!/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. Como mostrado acima, cole o FILEIDENTIFIER no script. Lembre-se de manter as aspas duplas!

  6. Forneça um nome para o arquivo no lugar de FILENAME. Lembre-se de manter as aspas duplas e também incluir a extensão em FILENAME (por exemplo, myfile.zip).
  7. Agora, salve o arquivo e torne-o executável executando este comando no terminal sudo chmod +x download-gdrive.sh.
  8. Execute o script usando `./download-gdrive.sh".

PS: Aqui está a essência do Github para o script acima: https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424


para wget substituir -ccom --save-cookiese -bcom--load-cookies
untore

3
confirmou isso funcionou para mim 👍, editado um pouco de clareza
Jeff Atwood

1
Funciona em janeiro de 2019. Eu precisava adicionar "aspas ${filename}na última linha.
Jimbo

> Execute o script usando ./download-gdrive.sh" Do not be like me and try to run the script by typing download-gdrive.sh , the . / `Parece ser obrigatório.
Ambroise Rabier

Trabalhando em maio de 2019
Kshitij Bajracharya

29

Aqui está uma maneira rápida de fazer isso.

Verifique se o link está compartilhado e se parecerá com isso:

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

Em seguida, copie esse FILEID e use-o assim

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

2
Oi, Obrigado pela resposta. Se você olhar para os arquivos no link que eu compartilhei, verá que, enquanto os arquivos são compartilhados, eles não possuem a tag 'authuser = 0' no link. Seu método não funcionou nos arquivos fornecidos! Arjun
Arjun

2
Nem tentei com acesso público, este funcionou bem para arquivos compartilhados somente por link. Usado assim:wget 'https://docs.google.com/uc?export=download&id=SECRET_ID' -O 'filename.pdf'
Sampo Sarrala - codidact.org

Não funciona a partir de 2018, estou recebendo a página da Web de verificação antivírus em vez do arquivo.
Calimo

7
Ignora o antivírus para mim em 2018 quando usado com a -rbandeira de wget. Por isso, éwget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILE_ID' -O 'filename'
Artem Pelenitsyn

1
Trabalhou para mim a partir de 10/2019 e foi a solução perfeita para colocar um arquivo em um contêiner Docker em execução que quase não possui aplicativos utilitários em execução.
ammills01

23

O comportamento padrão do google drive é verificar se há vírus nos arquivos, se o arquivo for muito grande, ele avisará o usuário e notificará o usuário de que o arquivo não pôde ser verificado.

No momento, a única solução alternativa encontrada foi compartilhar o arquivo com a web e criar um recurso da web.

Citação da página de ajuda do Google Drive:

Com o Drive, você pode tornar os recursos da Web, como arquivos HTML, CSS e Javascript, visíveis como um site.

Para hospedar uma página da web com o Drive:

  1. Abra o Drive em drive.google.com e selecione um arquivo.
  2. Clique no botão Compartilhar na parte superior da página.
  3. Clique em Avançado no canto inferior direito da caixa de compartilhamento.
  4. Clique em Alterar ....
  5. Escolha On - Public na web e clique em Save .
  6. Antes de fechar a caixa de compartilhamento, copie o ID do documento do URL no campo abaixo de "Link para compartilhar". O ID do documento é uma sequência de letras maiúsculas e minúsculas e números entre barras na URL.
  7. Compartilhe o URL parecido com "www.googledrive.com/host/[doc id], em que [doc id] é substituído pelo ID do documento que você copiou na etapa 6.
    Agora, qualquer pessoa pode visualizar sua página da web.

Encontrado aqui: https://support.google.com/drive/answer/2881970?hl=en

Por exemplo, quando você compartilha um arquivo no Google Drive publicamente, o sharelink fica assim:

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

Em seguida, copie o ID do arquivo e crie um linke googledrive.com com a seguinte aparência:

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

1
@ FıratKÜÇÜK você tem certeza de que tinha o formato de URL correto? (observe o www.googledrive.com e não o drive.google.com) Eu apenas tentei e funcionou.
Charles Floresta

Meu arquivo tem mais de 50 MB. ele pede uma confirmação de verificação de vírus. Portanto, a solução não é adequada para o meu caso. Em vez disso, usei a solução de aplicativo de console "gdrive".
Fırat KÜÇÜK

@ FıratKÜÇÜK Acabei de baixar um arquivo de mais de 200 Mb com esse método que normalmente desencadeia verificações de vírus. Eu obtive o ID com o botão direito do mouse> "obter link compartilhável".
Ciro Santilli escreveu


11
Este recurso é obsoleto e não mais suportada
Daniel G

19

O caminho fácil:

(se você precisar apenas de um download único)

  1. Vá para a página do Google Drive que possui o link para download
  2. Abra o console do navegador e vá para a guia "rede"
  3. Clique no link de download
  4. Aguarde o arquivo iniciar o download e localize a solicitação correspondente (deve ser a última da lista), para cancelar o download
  5. Clique com o botão direito do mouse na solicitação e clique em "Copiar como cURL" (ou similar)

Você deve terminar com algo como:

curl 'https://doc-0s-80-docs.googleusercontent.com/docs/securesc/aa51s66fhf9273i....................blah blah blah...............gEIqZ3KAQ==' --compressed

Depois dele no seu console, adicione > my-file-name.extensionaté o final (caso contrário, ele gravará o arquivo no seu console) e pressione enter :)


Trabalhou em junho de 2019
techkuz

Funciona a partir de fevereiro de 2020
Jivan

12

Com base na resposta de Roshan Sethia

Maio 2018

Usando o WGET :

  1. Crie um script de shell chamado wgetgdrive.sh como abaixo:

    #!/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
    
  2. Dê as permissões corretas para executar o script

  3. No terminal, execute:

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

    por exemplo:

    ./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
    

1
Isso funciona como charme graças, e às coisas facilidade:chmod 770 wgetgdrive.sh
Mohamed Kawsara

8

--ATUALIZADA--

Para baixar o arquivo, primeiro obtenha o youtube-dlpython aqui:

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

ou instale-o com pip:

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

ATUALIZAR:

Acabei de descobrir isso:

  1. Clique com o botão direito do mouse no arquivo que deseja baixar em drive.google.com

  2. Clique Get Sharable link

  3. Ativar Link sharing on

  4. Clique em Sharing settings

  5. Clique no menu suspenso superior para opções

  6. Clique em Mais

  7. Selecione [x] On - Anyone with a link

  8. Link de cópia

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

Copie o ID após https://drive.google.com/file/d/:

3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR

Cole isso na linha de comando:

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

Cole o id atrás 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)

Espero que ajude


1
oi obrigado Eu tentei isso e ele está baixando quando eu corro no prompt de comando, mas existe uma maneira de obter o "link direto" real como acesso a um servidor? Estou tentando executá-lo com o nó {spawn}, mas é necessário fazer o download para o servidor do nó e, a partir daí, fazer o download novamente, existe uma maneira de simplesmente obter um link de download direto do google drive? Que link eles usam?
bluejayke

Eu tenho que usar muito esse método agora, então vou tentar automatizá-lo completamente. Basta obter o link do google e um script Python fará o resto. Eu acho que vou usar selênio para fazer isso. Atualizará minha solução quando estiver funcionando.
jturi

Atualizei minha resposta. Agora é tão simples quanto 2 cliques para baixar qualquer arquivo com o youtube-dl.
jturi

7

Nenhuma resposta propõe o que funciona para mim em dezembro de 2016 ( fonte ):

curl -L https://drive.google.com/uc?id={FileID}

desde que o arquivo do Google Drive tenha sido compartilhado com aqueles que possuem o link e {FileID}seja a string por trás ?id=do URL compartilhado.

Embora eu não tenha verificado com arquivos enormes, acredito que seja útil saber.


Hmmm ... não funcionou para mim :( Apenas baixa o conteúdo da web - não o arquivo
kgingeri

1
curl -L -o {filename} https://drive.google.com/uc?id={FileID}trabalhou para mim, obrigado!
Dário

Isso não funciona para mim. Meu link está abaixo (qualquer pessoa com o link pode ver): drive.google.com/file/d/0B7Jh6M91b83bdFlWX2RIU2hYSWM/… . Eu tentei: <code> curl -O -J -L drive.google.com/uc?id=0B7Jh6M91b83bdFlWX2RIU2hYSWM </code> e recebo este resultado: curl: (56) Recebi o código HTTP 403 do proxy após CONNECT
Steve

7
Só funciona para arquivos de até 25MB, arquivos maiores dar vírus página de aviso de digitalização
cen

6

A maneira mais fácil é:

  1. Criar link de download e copiar fileID
  2. Faça o download com 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

1
Muito obrigado! Incrivelmente útil
Nicholas Pipitone

6

As respostas acima estão desatualizadas para abril de 2020, já que o Google Drive agora usa um redirecionamento para o local real do arquivo.

Trabalhando em abril de 2020 no macOS 10.15.4 para documentos públicos:

# 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>

1
download-google-2funciona para mim. Meu arquivo tem tamanho 3G. Obrigado @ danieltan95
Saurabh Kumar

Atualizei download-google-2a última curvatura para isso curl -L -b .tmp/$1cookies -C - "https://drive.google.com/uc?export=download&confirm=$code&id=$1" -o $2;e agora pode retomar o download.
ssi-anik 18/04

Parece que algo deu errado com o download em baixa velocidade. outra abordagem que encontrei. qr.ae/pNrPaJ
ssi-anik 18/04

5

Eu tive o mesmo problema com o Google Drive.

Veja como eu resolvi o problema usando os Links 2 .

  1. Abra um navegador no seu PC, navegue até seu arquivo no Google Drive. Dê ao seu arquivo um link público.

  2. Copie o link público para a área de transferência (por exemplo, clique com o botão direito do mouse em Copiar endereço do link)

  3. Abra um terminal. Se você estiver baixando para outro PC / servidor / máquina, deverá fazer o SSH nesse ponto

  4. Instale o Links 2 (método debian / ubuntu, use sua distro ou equivalente ao SO)

    sudo apt-get install links2

  5. Cole o link no seu terminal e abra-o com Links da seguinte forma:

    links2 "paste url here"

  6. Navegue até o link de download em Links usando as teclas de seta e pressione Enter

  7. Escolha um nome de arquivo e ele fará o download do seu arquivo


Linkstotalmente fez o truque! E é muito, muito melhor do quew3m
alvas

1
Esta é a única coisa que funcionou para mim! Fevereiro de 2019. O aplicativo gdown nos comentários anteriores é hospedado por ninguém menos que o google docs, por isso é impossível fazer o download também.
Steven

5

Use youtube-dl !

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

Você também pode passar --get-urlpara obter um URL de download direto.


1
@ Além disso, ainda funciona para mim youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [GoogleDrive] ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Downloading webpage. talvez você tenha uma versão desatualizada do youtube-dlou o formato de link não é reconhecido por ele por alguma razão ... Tente usar o formato acima substituindo o ID com o ID de arquivo do seu URL original
aularon

5

Eu tenho usado o snippet de onda de @ Amit Chahar, que postou uma boa resposta neste tópico. Achei útil colocá-lo em uma função bash em vez de em um .sharquivo separado

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
}

que pode ser incluído em, por exemplo, a ~/.bashrc(depois de adquirido, é claro, se não for fornecido automaticamente) e usado da seguinte maneira

   $ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar

Esta é provavelmente a melhor resposta ... o python gdown é tão pesado em comparação. Devo dizer que eu sou muito dis-satisfeito com embora GDrive ...
smaudet

1
Você não precisa do -f nem do -r no seu comando rm. Se você ensinar as pessoas a sempre "rm -rf", elas podem acabar removendo as coisas que desejam manter ...
josch 24/03

4

Há um cliente multiplataforma de código aberto, escrito em Go: drive . É bastante agradável e completo, e também está em desenvolvimento ativo.

$ 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`

4

Todas as respostas acima parecem obscurecer a simplicidade da resposta ou têm algumas nuances que não são explicadas.

Se o arquivo for compartilhado publicamente, você poderá gerar um link de download direto apenas conhecendo o ID do arquivo. O URL deve estar no formato " https://drive.google.com/uc?id=[FILEID}&export=download ". Funciona a partir de 22/11/2019. Isso não requer que o destinatário efetue login no Google, mas exige que o arquivo seja compartilhado publicamente.

  1. No seu navegador, navegue para drive.google.com.

  2. Clique com o botão direito do mouse no arquivo e clique em "Obter um link compartilhável"

Clique com o botão direito para obter o link compartilhável

  1. Abra uma nova guia, selecione a barra de endereço e cole o conteúdo da sua área de transferência, que será o link compartilhável. Você verá o arquivo exibido pelo visualizador do Google. O ID é o número logo antes do componente "Visualizar" do URL:

insira a descrição da imagem aqui

  1. Edite o URL para que ele fique no seguinte formato, substituindo "[FILEID]" pelo ID do seu arquivo compartilhado:

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

  2. Esse é o seu link de download direto. Se você clicar nele no navegador, o arquivo será "enviado" para o navegador, abrindo a caixa de diálogo de download, permitindo salvar ou abrir o arquivo. Você também pode usar este link nos seus scripts de download.

  3. Portanto, o comando curl equivalente seria:

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

2
Isso não funciona para arquivos grandes: obter o erroGoogle Drive can't scan this file for viruses. <filename> is too large for Google to scan for viruses. Would you still like to download this file?
Rekovni

Isso funcionou. Obrigado! Depois de converter o link para esse formato, você também pode usar o gdown, como mostrado em outras respostas
Harry M

3

Eu não consegui fazer o script perl do Nanoix funcionar, ou outros exemplos de curl que eu já havia visto, então comecei a pesquisar na API em python. Isso funcionou bem para arquivos pequenos, mas os arquivos grandes sufocaram o RAM disponível, então encontrei outro código de chunking interessante que usa a capacidade da API para fazer o download parcial. Gist here: https://gist.github.com/csik/c4c90987224150e4a0b2

Observe o pouco sobre o download do arquivo client_secret json da interface da API para o diretório local.

Fonte
$ 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) 

3

Aqui está um pequeno script bash que escrevi que faz o trabalho hoje. Ele funciona em arquivos grandes e também pode retomar arquivos parcialmente buscados. São necessários dois argumentos, o primeiro é o file_id e o segundo é o nome do arquivo de saída. As principais melhorias em relação às respostas anteriores aqui são que ele funciona em arquivos grandes e precisa apenas de ferramentas normalmente disponíveis: bash, curl, tr, grep, du, cut e 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

Bem-vindo ao SO. Se você usou alguma referência para esse fim, inclua-a na sua resposta. De qualquer forma, bom trabalho +1
M-- 18/04/19

3

Isso funciona a partir de novembro de 2017 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

Embora haja um "URL de origem" declarado e algumas análises, não tentei entender que funcionava simplesmente usando diretamente o que é chamado fileid aqui e em outras respostas como primeiro parâmetro.
janeiro

@jan Isso pode significar que há mais de um estilo de URL. Ainda bem que ainda funcionou para você.
21417 p173:

3

Depois de brincar com esse lixo. Encontrei uma maneira de baixar meu arquivo doce usando as ferramentas de desenvolvedor do chrome.

  1. Na guia Documentos do Google, Ctr + Shift + J (Configuração -> Ferramentas do desenvolvedor)
  2. Alterne para as guias de rede
  3. No seu arquivo de documentos, clique em "Download" -> Download como CSV, xlsx, ....
  4. Ele mostrará a solicitação no console "Rede" insira a descrição da imagem aqui

  5. Clique com o botão direito do mouse -> Copiar -> Copiar como Ondulação

  6. Seu comando Curl será assim e adicione -opara criar um arquivo exportado. curl 'https://docs.google.com/spreadsheets/d/1Cjsryejgn29BDiInOrGZWvg/export?format=xlsx&id=1Cjsryejgn29BDiInOrGZWvg' -H 'authority: docs.google.com' -H 'upgrade-insecure-requests: 1' -H 'user-agent: Mozilla/5.0 (X..... -o server.xlsx

Resolvido!


esse link expira e é apenas para 1 endereço IP por vez
bluejayke

Você pode simplesmente fazer uma solicitação silenciosa e constante para manter a sessão ativa. @bluejayke
Ender

Fiz exatamente isso e, quando vim aqui para escrever outra resposta, deparei com a sua. Confirmo que ele funciona com IPs diferentes, pois eu precisava baixar um arquivo de 36gb para o servidor que não possui um navegador. E eu extraí o link do meu laptop.
dmitry502 12/06

2

Aqui está uma solução alternativa para obter arquivos de download do Google Drive para o meu shell do Google Cloud Linux.

  1. Compartilhe o arquivo com PUBLIC e com permissões de edição usando o compartilhamento avançado.
  2. Você receberá um link de compartilhamento com um ID. Veja o link: - drive.google.com/file/d/[IDorgeous/view?usp=sharing
  3. Copie esse ID e cole-o no seguinte link: -

googledrive.com/host/[ID]

  1. O link acima seria o nosso link para download.
  2. Use wget para baixar o arquivo: -

wget https://googledrive.com/host/[ID]

  1. Este comando fará o download do arquivo com o nome [ID] sem extensão e com o mesmo tamanho de arquivo no mesmo local em que você executou o comando wget.
  2. Na verdade, baixei uma pasta compactada no meu consultório. então renomeei esse arquivo estranho usando: -

mv [ID] 1.zip

  1. então usando

descompacte 1.zip

nós vamos pegar os arquivos.



O Google retirou a hospedagem do drive, então isso não funciona mais.
precisa saber é

2

Encontrei uma solução funcional para isso ... Basta usar o seguinte

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

ao fazer isso, recebo AVISO: não é possível verificar o certificado do docs.google.com, emitido por `/ C = US / O = Google Trust Services / CN = Google Internet Authority G3 ': não é possível verificar localmente a autoridade do emissor. Solicitação HTTP enviada, aguardando resposta ... 404 Não encontrado 08-02-2019 02:56:30 ERRO 404: Não encontrado. alguma solução alternativa?
22819 bluejayke

UAU! Ótima resposta e muito lógico. Obrigado por escrever. Arquivo baixado de 1,3 GB usando este comando ... Modo totalmente automático a partir do terminal linux apenas por este comando. Também tentei no GCP. Funciona muito bem lá também. Ano 2020 ... Eu acredito que este é o caminho certo ... mesmo que eles mudem um pouco de comando, isso deve resistir ao teste do tempo.
Atta Jutt 30/03

2

Existe uma maneira mais fácil.

Instale o cliget / CURLWGET a partir da extensão firefox / chrome.

Faça o download do arquivo no navegador. Isso cria um link curl / wget que lembra os cookies e cabeçalhos usados ​​durante o download do arquivo. Use este comando em qualquer shell para fazer o download


Esta é sem dúvida a maneira mais fácil e simples.
C0degeas 12/03/19

2

a maneira mais fácil de baixar arquivos do google drive, você também pode baixar arquivos no colab

pip install gdown

import gdown

Então

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

ou

fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c'

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

Documento https://pypi.org/project/gdown/


legal. mas como é diferente da resposta do phi publicada mais de um ano antes da sua?
umläute

1

Maio 2018 TRABALHANDO

Olá, com base nesses comentários ... eu crio um bash para exportar uma lista de URL do arquivo URLS.txt para um URLS_DECODED.txt e usado em algum acelerador como o flashget (eu uso o cygwin para combinar windows e linux)

O spider de comando foi introduzido para evitar o download e obter o link final (diretamente)

Comande GREP HEAD e CUT, processe e obtenha o link final, é baseado no idioma espanhol, talvez você possa ser a porta para o IDIOMA INGLÊS

echo -e "$URL_TO_DOWNLOAD\r" provavelmente o \ r é apenas cywin e deve ser substituído por um \ n (quebra de linha)

**********user*********** é a pasta do usuário

*******Localización*********** está no idioma espanhol, limpe os astericos e deixe a palavra em inglês Localização e adapte os números THE HEAD e CUT para a abordagem apropriada.

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

1

Você só precisa usar o wget com:

 https://drive.google.com/uc?authuser=0&id=[your ID without brackets]&export=download

PD. O arquivo deve ser público.


0

O skicka é uma ferramenta cli para fazer upload, baixar arquivos de acesso a partir de um drive do google.

exemplo -

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.