wget / arriccia file di grandi dimensioni da Google Drive


306

Sto provando a scaricare un file da Google Drive in uno script e ho qualche problema a farlo. I file che sto cercando di scaricare sono qui .

Ho guardato ampiamente online e finalmente sono riuscito a scaricarne uno. Ho ottenuto gli UID dei file e quello più piccolo (1,6 MB) si scarica bene, tuttavia il file più grande (3,7 GB) reindirizza sempre a una pagina che mi chiede se voglio procedere con il download senza una scansione antivirus. Qualcuno potrebbe aiutarmi a superare quella schermata?

Ecco come ho funzionato il primo file -

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

Quando eseguo lo stesso sull'altro file,

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

Ottengo il seguente output - inserisci qui la descrizione dell'immagine

Noto sull'ultima riga del collegamento, c'è una &confirm=JwkKstringa casuale di 4 caratteri ma suggerisce che c'è un modo per aggiungere una conferma al mio URL. Uno dei link che ho visitato ha suggerito &confirm=no_antivirusma non funziona.

Spero che qualcuno qui possa aiutarti!


puoi per favore fornire quello che curl scripthai usato per scaricare il file da google drivequando non riesco a scaricare un file di lavoro (immagine) da questo scriptcurl -u username:pass https://drive.google.com/open?id=0B0QQY4sFRhIDRk1LN3g2TjBIRU0 >image.jpg
Kasun Siyambalapitiya

Guarda la risposta accettata. Ho usato lo script gdown.plgdown.pl https://drive.google.com/uc?export=download&confirm=yAjx&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM index4phlat.tar.gz
Arjun,

2
Non aver paura di scorrere! Questa risposta fornisce un bellissimo script Python da scaricare in una volta sola.
Ciprian Tomoiagă,

./gdrive download [FILEID] [--recursive se si tratta di una cartella] ti chiederà di accedere a un determinato URL e di copiare e incollare un codice token.
roj4s,

Risposte:


59

ATTENZIONE : questa funzionalità è obsoleta. Vedere l'avviso di seguito nei commenti.


Dai un'occhiata a questa domanda: download diretto da Google Drive utilizzando l'API di Google Drive

Fondamentalmente devi creare una directory pubblica e accedere ai tuoi file con riferimento relativo con qualcosa di simile

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

In alternativa, puoi utilizzare questo script: https://github.com/circulosmeos/gdown.pl


5
un altro buon modo è usare lo strumento da riga di comando di Linux "gdrive" github.com/prasmussen/gdrive
Tobi

1
Sono stato in grado di utilizzare lo script perl di Nanolx in combinazione con il permalink di google drive creato su gdurl.com - Grazie!
jadik,

14
ATTENZIONE: il supporto di hosting Web in Google Drive è obsoleto. "A partire dal 31 agosto 2015, l'hosting web in Google Drive per utenti e sviluppatori sarà deprecato. I clienti di Google Apps possono continuare a utilizzare questa funzione per un periodo di un anno fino al 31 agosto 2016, quando pubblicano contenuti tramite googledrive.com/host / ID documento verrà sospeso. " googleappsupdates.blogspot.com/2015/08/…
chrish,

9
Purtroppo non funzionerà più a partire dal 2018.
Calimo,

2
gdown.pl ha funzionato benissimo anche per me. Una rapida occhiata allo script mostra che non sta usando quell'API, crea un nuovo URL con un parametro, export=downloadquindi dovrebbe essere buono per il prossimo futuro a meno che Google non cambi tale schema URL
Ben Baron,

234

Giugno 2020

Il file_iddovrebbe essere simile a 0Bz8a_Dbh9QhbNU3SGlFaDg

Puoi ottenerlo facendo clic con il pulsante destro del mouse sul file e quindi Ottieni link condivisibile. Funziona solo su file ad accesso aperto (chiunque abbia un collegamento può visualizzare). Non funziona per le directory. Testato su Google Colab. Funziona meglio con il download di file. Usa tar / zip per renderlo un singolo file.

Esempio: per scaricare il file Leggimi da questa directory

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

9
Basta rimuovere export=download&da gdown https://drive.google.com/uc?export=download&id=your_file_ide funziona come fascino
Saravanabalagi Ramachandran

8
Questo ha funzionato a luglio 2018! Ricorda di condividere il file e se hai il link come drive.google.com/open?id=FILE_ID basta sostituire "open" con "uc" e semplicemente gdown drive.google.com/uc?id=FILE_ID
simo23

7
Come possiamo scaricare una cartella da Gdrive usando gdown?
user1

7
Non funziona a partire da agosto 2019. Errore: "Autorizzazione negata: drive.google.com/uc?id=0B7EVK8r0v71pWEZsZE9oNnFzTm8 Forse devi modificare l'autorizzazione su" Chiunque abbia il link "?" Ed è il set di dati CelebA scaricabile pubblicamente, quindi dovrebbe essere ok. Ho acquisito il link per il download facendo clic su "ottieni link condivisibili", quindi è stato indicato "condivisione link attivata" e "chiunque può visualizzarlo può visualizzarlo". Quindi sembra che l'autorizzazione sia già stata concessa, ma l'errore dice che l'autorizzazione è stata negata. Ecco il sito host se vuoi provarlo: mmlab.ie.cuhk.edu.hk/projects/CelebA.html
Kristof

6
Questa è l'unica soluzione della mezza dozzina che ho provato che funziona. Deve essere votato al primo. Avevo solo bisogno di cambiare il "link condiviso" da: drive.google.com/open?id=XXXX in drive.google.com/uc?id=XXXX
deprekate

194

Ho scritto uno snippet Python che scarica un file da Google Drive, dato un link condivisibile . Funziona da agosto 2017 .

Lo snipped non utilizza gdrive né l'API di Google Drive. Utilizza il modulo di richieste .

Quando si scaricano file di grandi dimensioni da Google Drive, una singola richiesta GET non è sufficiente. È necessario un secondo e questo ha un parametro URL aggiuntivo chiamato Conferma , il cui valore dovrebbe essere uguale al valore di un determinato 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)

Sto eseguendo lo snippet python snippet.py file_id destination. È questo il modo corretto di eseguirlo? Perché se la destinazione è una cartella mi viene lanciato un errore. Se eseguo il backup di un file e lo utilizzo come destinazione, lo snippet sembra funzionare correttamente ma non fa nulla.
Manfredo,

2
@Manfredo ti serve il nome del file per cui vuoi salvare il file poiché, ad esempio, ha $ python snippet.py your_google_file_id /your/full/path/and/filename.xlsx funzionato per me. nel caso in cui non funzionasse, hai qualche offerta fornita? viene creato qualche file?
Jeff,

1
@CiprianTomoiaga Ho il 90% di una barra di avanzamento funzionante, usando il modulo tqdm Python. Ho fatto un'idea : gist.github.com/joshtch/8e51c6d40b1e3205d1bb2eea18fb57ae . Sfortunatamente non ho trovato un modo affidabile per ottenere la dimensione totale del file, che ti servirà per calcolare la percentuale di avanzamento e il tempo di completamento stimato.
joshtch,

Inoltre, che tipo di autenticazione utilizza il modulo richieste per accedere a google drives? OAuth? Ad esempio, dove viene gestito questo codice sopra - request-oauthlib.readthedocs.io/en/latest/… ?
tauseef_CuriousAcquista il

7
Questo e spettacolare! Ecco un suggerimento per drive_File_ID: https // drive.google.com / file / d / "drive_File_ID" / view - tra https ~~ file / d / e / view del link per il download.
Jaeyoung Lee,

70

È possibile utilizzare lo strumento da riga di comando Linux / Unix open source gdrive.

Per installarlo:

  1. Scarica il binario. Scegli quello che si adatta alla tua architettura, ad esempiogdrive-linux-x64.

  2. Copia sul tuo percorso.

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

Per usarlo:

  1. Determina l'ID del file di Google Drive. Per questo, fai clic con il pulsante destro del mouse sul file desiderato nel sito Web di Google Drive e scegli "Ottieni link ...". Restituirà qualcosa di simile https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H. Ottieni la stringa dietro ?id=e copiarla negli appunti. Questo è l'ID del file.

  2. Scarica il file Ovviamente, usa l'ID del tuo file invece nel seguente comando.

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

Al primo utilizzo, lo strumento dovrà ottenere le autorizzazioni di accesso all'API di Google Drive. Per questo, ti mostrerà un link che devi visitare in un browser e quindi otterrai un codice di verifica da copiare e incollare nello strumento. Il download si avvia quindi automaticamente. Non esiste un indicatore di avanzamento, ma è possibile osservare l'avanzamento in un file manager o in un secondo terminale.

Fonte: un commento di Tobi su un'altra risposta qui.

 

Trucco aggiuntivo: limitazione della velocità. Per scaricare con gdriveuna velocità massima limitata (per non inondare la rete ...), puoi usare un comando come questo ( pvè PipeViewer ):

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

Questo mostrerà la quantità di dati scaricati ( -b) e la velocità di download ( -r) e limiterà tale velocità a 90 kiB / s ( -L 90k).


messaggio di errore: "Limite giornaliero per uso non autenticato superato. L'uso continuato richiede l'iscrizione.", codice: 403
Nianliang,

@Nianliang Non l'hai ancora sperimentato, ma ecco un'ipotesi: hai usato gdrive per scaricare un file accessibile pubblicamente, quindi non ti chiederà l'autenticazione al primo utilizzo. Prova prima un file non pubblico, assicurati che l'autenticazione abbia esito positivo (come descritto nella risposta: "Al primo utilizzo, ..."). È stato d'aiuto?
tanius,

3
Impossibile ottenere il codice di verifica. Ottieni l'errore "Accedi con Google temporaneamente disattivato per questa app Questa app non è stata ancora verificata da Google per poter utilizzare Google Accedi."
useranon

1
Stesso messaggio di errore qui: "Questa app non è stata ancora verificata da Google per poter utilizzare Google Accedi."
gebbissimo,

1
@useranon: prova questa soluzione: github.com/gdrive-org/gdrive/issues/533#issuecomment-596336395 , devi creare un account del servizio Google e condividere il file / la cartella con questo indirizzo dell'account del servizio. L'ho fatto. Funziona dal 17/04/2020!
whyisyoung

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

Come funziona?
Ottieni file cookie e codice html con arricciatura.
Installa HTML su grep e sed e cerca il nome del file.
Ottieni il codice di conferma dal file cookie con awk.
Infine scarica il file con i cookie abilitati, conferma codice e nome file.

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

Se non hai bisogno di curl variabile nome file puoi indovinarlo
-L Segui i reindirizzamenti
-O Nome
-remoto -J Nome -intestazione-remoto

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

Per estrarre l'ID file di Google dall'URL è possibile utilizzare:

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

O

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 

Molto ben fatto. Sbarazzarsi dell'avvertimento del virus su un file da 5 GB + quando tutte le altre risposte falliscono.

1
Questo è fantastico. Ho dovuto aggiungere l' --insecureopzione a entrambe le richieste di arricciatura per farlo funzionare.
Taylor R,

@lapinpt come posso aggiungere la funzionalità RESUME?
steven7mwesigwa,

Possiamo in qualche modo sbarazzarci dell'id google se abbiamo un link pubblico al file?
Remo

42

Aggiornamento da marzo 2018.

Ho provato varie tecniche fornite in altre risposte per scaricare il mio file (6 GB) direttamente da Google Drive nella mia istanza di AWS ec2, ma nessuno di questi funziona (potrebbe essere perché sono vecchi).

Quindi, per l'informazione degli altri, ecco come l'ho fatto con successo:

  1. Fai clic con il pulsante destro del mouse sul file che desideri scaricare, fai clic su condividi, nella sezione condivisione link, seleziona "chiunque può modificare questo link".
  2. Copia il link. Dovrebbe essere in questo formato:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. Copia la parte FILEIDENTIFIER dal link.
  4. Copia lo script seguente in un file. Usa l'arricciatura e elabora i cookie per automatizzare il download del file.

    #!/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. Come mostrato sopra, incolla FILEIDENTIFIER nello script. Ricorda di mantenere le doppie virgolette!

  6. Fornire un nome per il file al posto di FILENAME. Ricorda di mantenere le virgolette doppie e includere anche l'estensione in FILENAME (ad esempio myfile.zip).
  7. Ora, salva il file e rendilo eseguibile eseguendo questo comando nel terminale sudo chmod +x download-gdrive.sh.
  8. Esegui lo script usando `./download-gdrive.sh".

PS: Ecco l'essenza di Github per lo script sopra indicato: https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424


per wget sostituire -ccon --save-cookiese -bcon--load-cookies
untore

3
confermato che ha funzionato per me 👍, modificato un po 'per chiarezza
Jeff Atwood,

1
Funziona a gennaio 2019. Avevo bisogno di aggiungere le "virgolette ${filename}sull'ultima riga.
Jimbo,

> Esegui lo script usando ./download-gdrive.sh" Do not be like me and try to run the script by typing download-gdrive.sh , the . / `Sembra essere obbligatorio.
Ambroise Rabier,

Lavorare a maggio 2019
Kshitij Bajracharya

29

Ecco un modo rapido per farlo.

Assicurati che il link sia condiviso e sarà simile a questo:

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

Quindi, copia quel FILEID e usalo in questo modo

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

2
Ciao, grazie per la risposta. Se guardi i file sul link che ho condiviso, vedrai che mentre i file sono condivisi, mancano il tag 'authuser = 0' nel link. Il tuo metodo non ha funzionato sui file forniti! Arjun
Arjun,

2
Non ho nemmeno provato con l'accesso pubblico, questo ha funzionato bene per i file condivisi solo link atow. Usata così:wget 'https://docs.google.com/uc?export=download&id=SECRET_ID' -O 'filename.pdf'
Sampo Sarrala - codidact.org

Non funziona dal 2018, sto ottenendo la pagina web di scansione antivirus invece del file.
Calimo,

7
Ignora lo scanner antivirus per me nel 2018 se utilizzato con la -rbandiera di wget. Così èwget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILE_ID' -O 'filename'
Artem Pelenitsyn,

1
Ha funzionato per me dal 10/2019 ed è stata la soluzione perfetta per me ottenere un file in un contenitore Docker in esecuzione che non ha quasi nessuna app di utilità in esecuzione su di esso.
ammills01

23

Il comportamento predefinito di google drive è di scansionare i file alla ricerca di virus se il file è troppo grande, verrà richiesto all'utente e lo informerà che il file non può essere scansionato.

Al momento l'unica soluzione che ho trovato è quella di condividere il file con il web e creare una risorsa web.

Citazione dalla pagina della guida di google drive:

Con Drive puoi rendere le risorse Web, come file HTML, CSS e Javascript, visualizzabili come sito Web.

Per ospitare una pagina Web con Drive:

  1. Apri Drive su drive.google.com e seleziona un file.
  2. Fai clic sul pulsante Condividi nella parte superiore della pagina.
  3. Fai clic su Avanzate nell'angolo in basso a destra della casella di condivisione.
  4. Fai clic su Modifica ....
  5. Scegli Attivo - Pubblico sul Web e fai clic su Salva .
  6. Prima di chiudere la casella di condivisione, copia l'ID documento dall'URL nel campo sotto "Link per condividere". L'ID documento è una stringa di lettere maiuscole e minuscole e numeri tra le barre nell'URL.
  7. Condividi l'URL che assomiglia a "www.googledrive.com/host/[doc id] dove [ID documento] è sostituito dall'ID documento che hai copiato nel passaggio 6.
    Chiunque può ora visualizzare la tua pagina web.

Trovato qui: https://support.google.com/drive/answer/2881970?hl=it

Quindi, ad esempio, quando condividi pubblicamente un file su Google Drive, lo sharelink si presenta così:

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

Quindi si copia l'ID file e si crea un linke googledrive.com che assomiglia a questo:

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

1
@ FıratKÜÇÜK sei sicuro di avere il formato url giusto? (nota www.googledrive.com e non drive.google.com) Ho appena provato e ha funzionato.
Charles Forest,

Il mio file è oltre 50 MB. chiede una conferma della scansione antivirus. Quindi la soluzione non è adatta al mio caso. Invece ho usato la soluzione di applicazione console "gdrive".
Fırat KÜÇÜK,

@ FıratKÜÇÜK Sono appena riuscito a scaricare un file di oltre 200 Mb con questo metodo che normalmente attiverebbe i controlli dei virus. Ho ottenuto l'ID dal clic destro> "ottieni link condivisibile".
Ciro Santilli 11 冠状 病 六四 事件 法轮功 l'


11
Questa funzione è obsoleta e non è più supportata
Daniel G,

19

Il modo semplice:

(se ne hai solo bisogno per un download una tantum)

  1. Vai alla pagina Web di Google Drive con il link per il download
  2. Apri la console del browser e vai alla scheda "rete"
  3. Fai clic sul link per il download
  4. Attendi che il file inizi a scaricare e trova la richiesta corrispondente (dovrebbe essere l'ultima nell'elenco), quindi puoi annullare il download
  5. Fare clic destro sulla richiesta e fare clic su "Copia come cURL" (o simile)

Dovresti finire con qualcosa del tipo:

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

Passalo nella tua console, aggiungi > my-file-name.extensionfino alla fine (altrimenti scriverà il file nella tua console), quindi premi Invio :)


Funzionato da giugno 2019
techkuz il

Funziona da febbraio 2020
Jivan il

12

Sulla base della risposta di Roshan Sethia

Maggio 2018

Utilizzando WGET :

  1. Crea uno script della shell chiamato wgetgdrive.sh come di seguito:

    #!/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. Dare le autorizzazioni giuste per eseguire lo script

  3. Nel terminale, esegui:

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

    per esempio:

    ./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
    

1
Funziona come CHARM grazie e per facilitare le cose:chmod 770 wgetgdrive.sh
Mohamed Kawsara,

8

--UPDATED--

Per scaricare il file, prima procurati youtube-dlPython da qui:

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

o installalo con pip:

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

AGGIORNARE:

Ho appena scoperto questo:

  1. Fare clic con il tasto destro sul file che si desidera scaricare da drive.google.com

  2. Clic Get Sharable link

  3. Attiva Link sharing on

  4. Clicca su Sharing settings

  5. Fai clic sul menu a discesa in alto per le opzioni

  6. Clicca su Altro

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

  8. Copia link

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

Copia l'id dopo https://drive.google.com/file/d/:

3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR

Incollalo nella riga di comando:

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

Incolla l'ID dietro 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)

Spero che sia d'aiuto


1
ciao grazie ho provato questo e si sta scaricando quando corro dal prompt dei comandi, ma c'è un modo per ottenere l'attuale "collegamento diretto" come per l'accesso su un server? Sto tentando di eseguirlo con il nodo {spawn}, ma poi deve scaricare sul server del nodo e da lì scaricarlo di nuovo, c'è un modo per ottenere semplicemente un link per il download diretto da Google Drive? Quale link usano?
bluejayke

Devo usare molto questo metodo ora quindi cercherò di automatizzarlo completamente. Basta ottenere il link di Google e uno script Python farà il resto. Penso che userò il selenio per fare questo. Aggiornerà la mia soluzione quando funziona.
jturi,

Aggiornato la mia risposta. Questo è ora semplice come 2 clic per scaricare qualsiasi file con youtube-dl.
jturi,

7

Nessuna risposta propone ciò che funziona per me a dicembre 2016 ( fonte ):

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

purché il file di Google Drive sia stato condiviso con quelli che hanno il link ed {FileID}è la stringa dietro ?id=l'URL condiviso.

Anche se non ho verificato con file di grandi dimensioni, credo che potrebbe essere utile saperlo.


Hmmm ... non ha funzionato per me :( Scarica solo contenuti web - non il file
kgingeri

1
curl -L -o {filename} https://drive.google.com/uc?id={FileID}ha funzionato per me, grazie!
Dário,

Questo non funziona per me. Il mio link è sotto (chiunque può vedere): drive.google.com/file/d/0B7Jh6M91b83bdFlWX2RIU2hYSWM/… . Ho provato: <code> curl -O -J -L drive.google.com/uc?id=0B7Jh6M91b83bdFlWX2RIU2hYSWM </code> e ottengo questo risultato: curl: (56) Ricevuto il codice HTTP 403 dal proxy dopo CONNECT
Steve

7
Funziona solo per file fino a 25 MB, i file più grandi danno virus scan pagina di avviso
cen

6

Il modo più semplice è:

  1. Crea link di download e copia fileID
  2. Scarica con 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
Grazie mille! Incredibilmente utile
Nicholas Pipitone il

6

Le risposte di cui sopra sono obsolete per aprile 2020, poiché Google Drive ora utilizza un reindirizzamento alla posizione effettiva del file.

Funzionando da aprile 2020 su macOS 10.15.4 per documenti pubblici:

# 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-2per me va bene. Il mio file ha una dimensione 3G. Grazie @ danieltan95
Saurabh Kumar il

Ho aggiornato download-google-2l'ultimo ricciolo a questo curl -L -b .tmp/$1cookies -C - "https://drive.google.com/uc?export=download&confirm=$code&id=$1" -o $2;e ora posso riprendere il download.
ssi-anik,

Sembra che qualcosa sia andato storto con il download a bassa velocità. un altro approccio che ho trovato. qr.ae/pNrPaJ
ssi-anik,

5

Ho avuto lo stesso problema con Google Drive.

Ecco come ho risolto il problema utilizzando Links 2 .

  1. Apri un browser sul tuo PC, vai al tuo file in Google Drive. Dai al tuo file un link pubblico.

  2. Copia il link pubblico negli appunti (ad es. Clic destro, Copia indirizzo link)

  3. Apri un terminale. Se stai scaricando su un altro PC / server / macchina, dovresti SSH su questo punto

  4. Installa Links 2 (metodo debian / ubuntu, usa la tua distribuzione o l'equivalente del sistema operativo)

    sudo apt-get install links2

  5. Incolla il link nel tuo terminale e aprilo con Links in questo modo:

    links2 "paste url here"

  6. Passare al collegamento per il download in Collegamenti utilizzando i tasti freccia e premere Enter

  7. Scegli un nome file e scaricherà il tuo file


Linkstotalmente fatto il trucco! Ed è molto meglio diw3m
alvas

1
Questa è l'unica cosa che ha funzionato per me! Febbraio 2019. L'app di gdown nei commenti precedenti è ospitata da nientemeno che da Google Documenti, quindi è impossibile scaricare anche.
Steven

5

Usa youtube-dl !

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

Puoi anche passare --get-urlper ottenere un URL per il download diretto.


1
@Ender funziona ancora per me youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [GoogleDrive] ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Downloading webpage. forse hai una versione obsoleta youtube-dlo il formato del link non è riconosciuto da esso per qualche motivo ... Prova a utilizzare il formato sopra sostituendo l'id con l'ID del file dal tuo URL originale
aularon

5

Ho usato il frammento di ricciolo di @ Amit Chahar che ha pubblicato una buona risposta in questa discussione. Ho trovato utile metterlo in una funzione bash piuttosto che in un .shfile separato

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
}

che può essere incluso ad esempio in ~/.bashrc(dopo averlo fornito naturalmente se non fornito automaticamente) e utilizzato nel modo seguente

   $ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar

Questa è probabilmente la risposta migliore ... il python gdown è così pesante in confronto. Devo dire che sono piuttosto insoddisfatto di gdrive però ...
smaudet,

1
Non è necessario né -f né -r nel comando rm. Se insegni alle persone a "rm -rf" sempre che potrebbero finire per rimuovere le cose che vogliono mantenere ...
josch

4

C'è un client multipiattaforma open source, scritto in Go: drive . È abbastanza bello e completo, ed è anche in fase di sviluppo attivo.

$ 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

Tutte le risposte di cui sopra sembrano oscurare la semplicità della risposta o presentare alcune sfumature che non vengono spiegate.

Se il file è condiviso pubblicamente, puoi generare un link per il download diretto semplicemente conoscendo l'ID del file. L'URL deve essere nel formato " https://drive.google.com/uc?id=[FILEID[&export=download " Funziona dall'11 al 22-2019. Ciò non richiede che il destinatario acceda a google ma richiede che il file sia condiviso pubblicamente.

  1. Nel tuo browser, accedi a drive.google.com.

  2. Fare clic destro sul file e fare clic su "Ottieni un link condivisibile"

Fare clic con il tasto destro del mouse per ottenere il link condivisibile

  1. Apri una nuova scheda, seleziona la barra degli indirizzi e incolla il contenuto degli appunti che sarà il link condivisibile. Vedrai il file visualizzato dal visualizzatore di Google. L'ID è il numero immediatamente prima del componente "Visualizza" dell'URL:

inserisci qui la descrizione dell'immagine

  1. Modifica l'URL in modo che sia nel seguente formato, sostituendo "[FILEID]" con l'ID del tuo file condiviso:

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

  2. Questo è il tuo link per il download diretto. Se fai clic su di esso nel tuo browser, il file verrà ora "spinto" nel tuo browser, aprendo la finestra di download, permettendoti di salvare o aprire il file. È inoltre possibile utilizzare questo collegamento negli script di download.

  3. Quindi il comando di arricciatura equivalente sarebbe:

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

2
Questo non funziona per file di grandi dimensioni: ottieni l'erroreGoogle 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

Questo ha funzionato. Grazie! Dopo aver convertito il link in quel formato, puoi anche usare gdown come mostrato in altre risposte
Harry M

3

Non sono riuscito a far funzionare lo script perl di Nanoix o altri esempi di arricciature che avevo visto, quindi ho iniziato a esaminare l'API in Python. Questo ha funzionato bene per i file di piccole dimensioni, ma i file di grandi dimensioni sono stati bloccati oltre la RAM disponibile, quindi ho trovato qualche altro bel codice di chunking che utilizza la capacità di api per il download parziale. Gist qui: https://gist.github.com/csik/c4c90987224150e4a0b2

Nota il bit sul download del file json client_secret dall'interfaccia API nella tua directory locale.

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

Ecco un piccolo script bash che ho scritto che fa il lavoro oggi. Funziona su file di grandi dimensioni e può riprendere anche file parzialmente recuperati. Sono necessari due argomenti, il primo è il file_id e il secondo è il nome del file di output. I principali miglioramenti rispetto alle risposte precedenti qui sono che funziona su file di grandi dimensioni e necessita solo di strumenti comunemente disponibili: 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

Benvenuti in SO. Se hai utilizzato riferimenti a tale scopo, includili nella risposta. Comunque, bel lavoro +1
M--

3

Funziona da novembre 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

Anche se c'è scritto "url sorgente" e c'è qualche analisi, non ho provato a capire che ha funzionato semplicemente usando direttamente quello che viene chiamato fileid qui e in altre risposte come primo parametro.
gennaio

@jan Ciò può significare che esiste più di uno stile di URL. Sono contento che abbia funzionato ancora per te.
ppetraki,

3

Dopo aver fatto casino con questa spazzatura. Ho trovato un modo per scaricare il mio dolce file usando chrome - strumenti per sviluppatori.

  1. Nella scheda Google Documenti, Ctr + Maiusc + J (Impostazioni -> Strumenti per sviluppatori)
  2. Passa alle schede Rete
  3. Nel tuo file docs, fai clic su "Download" -> Scarica come CSV, xlsx, ....
  4. Ti mostrerà la richiesta nella console "Rete" inserisci qui la descrizione dell'immagine

  5. Fare clic con il tasto destro -> Copia -> Copia come arricciatura

  6. Il tuo comando Curl sarà così e aggiungilo -oper creare un file esportato. 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

Risolto!


quel link scade ed è solo per 1 indirizzo IP alla volta
bluejayke

Puoi semplicemente fare una richiesta silenziosa e costante per mantenere viva la sessione. @bluejayke
Ender

L'ho fatto esattamente e quando sono venuto qui per scrivere un'altra risposta, mi sono imbattuto nella tua. Confermo che funziona con IP diversi in quanto avevo bisogno di scaricare un file da 36 GB sul server che non ha un browser. E ho estratto il link dal mio laptop.
dmitry502,

2

Ecco una soluzione alternativa che mi è venuta in mente per scaricare file da Google Drive sulla mia shell di Google Cloud Linux.

  1. Condividi il file su PUBLIC e con le autorizzazioni Modifica utilizzando la condivisione avanzata.
  2. Otterrai un link di condivisione che avrebbe un ID. Vedi il link: - drive.google.com/file/d/[ID[/view?usp=sharing
  3. Copia quell'ID e incollalo nel seguente link: -

googledrive.com/host/[ID]

  1. Il link sopra sarebbe il nostro link per il download.
  2. Usa wget per scaricare il file: -

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

  1. Questo comando scaricherà il file con il nome [ID] senza estensione e con le stesse dimensioni del file nella stessa posizione in cui è stato eseguito il comando wget.
  2. In realtà, ho scaricato una cartella zippata nella mia pratica. così ho rinominato quel file scomodo usando: -

mv [ID] 1.zip

  1. quindi utilizzando

decomprimere 1.zip

otterremo i file.



Google ha rimosso l'hosting dall'unità, quindi non funziona più.
Kgingeri,

2

Ho trovato una soluzione funzionante a questo ... Usa semplicemente quanto segue

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

quando lo faccio ricevo ATTENZIONE: impossibile verificare il certificato di docs.google.com, rilasciato da `/ C = US / O = Google Trust Services / CN = Google Internet Authority G3 ': Impossibile verificare localmente l'autorità dell'emittente. Richiesta HTTP inviata, in attesa di risposta ... 404 Not Found 2019-02-08 02:56:30 ERRORE 404: Not Found. qualche soluzione alternativa?
Bluejayke

WOW! Ottima risposta e molto logico. Grazie per averlo scritto. File da 1,3 GB scaricato usando questo comando ... Modalità completamente automatica dal terminale Linux solo con questo comando. Provato anche su GCP. Funziona benissimo anche lì. Anno 2020 ... Credo che questo sia il modo giusto ... anche se cambiano un po 'di comandi questo dovrebbe resistere alla prova del tempo.
Atta Jutt,

2

C'è un modo più semplice.

Installa cliget / CURLWGET dall'estensione firefox / chrome.

Scarica il file dal browser. Questo crea un collegamento curl / wget che ricorda i cookie e le intestazioni utilizzate durante il download del file. Utilizzare questo comando da qualsiasi shell per il download


Questo è senza dubbio il modo più semplice e semplice.
c0degeas,

2

il modo semplice per scaricare il file da Google Drive è anche possibile scaricare il file su colab

pip install gdown

import gdown

Poi

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

o

fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c'

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

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


freddo. ma in cosa differisce dalla risposta di phi che è stata pubblicata più di un anno prima della tua?
Umläute,

1

Maggio 2018 LAVORO

Ciao sulla base di questi commenti ... creo un bash per esportare un elenco di URL dal file URLS.txt in un URLS_DECODED.txt utilizzato in alcuni acceleratori come flashget (uso cygwin per combinare windows e linux)

Command spider è stato introdotto per evitare il download e ottenere il link finale (direttamente)

Comanda GREP HEAD e CUT, elabora e ottieni il link finale, è basato in lingua spagnola, forse potresti essere portato in LINGUA INGLESE

echo -e "$URL_TO_DOWNLOAD\r" probabilmente il \ r è solo cywin e deve essere sostituito da un \ n (linea di interruzione)

**********user*********** è la cartella dell'utente

*******Localización*********** è in lingua spagnola, cancella gli asterici e lascia la parola in inglese Posizione e adatta i numeri THE HEAD e CUT all'approccio appropriato.

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

Devi solo usare wget con:

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

PD. Il file deve essere pubblico.


0

skicka è uno strumento cli per caricare, scaricare file di accesso da un drive di Google.

esempio -

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.