wget / curl archivo grande de google drive

306

Estoy tratando de descargar un archivo de Google Drive en un script, y tengo algunos problemas para hacerlo. Los archivos que intento descargar están aquí .

He buscado mucho en línea y finalmente logré descargar uno de ellos. Obtuve los UID de los archivos y el más pequeño (1,6 MB) se descarga bien, sin embargo, el archivo más grande (3,7 GB) siempre redirige a una página que me pregunta si quiero continuar con la descarga sin un análisis de virus. ¿Podría alguien ayudarme a pasar esa pantalla?

Así es como conseguí el primer archivo funcionando:

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

Cuando ejecuto lo mismo en el otro archivo,

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

Me sale el siguiente resultado: ingrese la descripción de la imagen aquí

Noto en la penúltima línea del enlace, hay una &confirm=JwkKcadena aleatoria de 4 caracteres pero sugiere que hay una manera de agregar una confirmación a mi URL. Uno de los enlaces que visité sugirió &confirm=no_antiviruspero eso no funciona.

¡Espero que alguien aquí pueda ayudar con esto!

Arjun
fuente
¿puede proporcionar el curl scriptque utilizó para descargar el archivo google driveya que no puedo descargar un archivo de trabajo (imagen) de este scriptcurl -u username:pass https://drive.google.com/open?id=0B0QQY4sFRhIDRk1LN3g2TjBIRU0 >image.jpg
Kasun Siyambalapitiya
Mira la respuesta aceptada. Usé el script gdown.plgdown.pl https://drive.google.com/uc?export=download&confirm=yAjx&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM index4phlat.tar.gz
Arjun
2
¡No tengas miedo de desplazarte! Esta respuesta proporciona un script de Python muy agradable para descargar de una vez.
Ciprian Tomoiagă
./gdrive download [FILEID] [--recursivo si es una carpeta] le pedirá que acceda a una URL determinada y copie y pegue un código de token.
roj4s

Respuestas:

59

ADVERTENCIA : esta funcionalidad está en desuso. Vea la advertencia a continuación en los comentarios.


Eche un vistazo a esta pregunta: descarga directa desde Google Drive utilizando la API de Google Drive

Básicamente, debe crear un directorio público y acceder a sus archivos por referencia relativa con algo como

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

Alternativamente, puede usar este script: https://github.com/circulosmeos/gdown.pl

guadafan
fuente
55
Otra buena manera es utilizar la herramienta de línea de comandos de Linux "gdrive" github.com/prasmussen/gdrive
Tobi
1
Pude usar el script perl de Nanolx en combinación con el enlace permanente de Google Drive creado en gdurl.com . ¡Gracias!
jadik
14
ADVERTENCIA: el soporte de alojamiento web en Google Drive está en desuso. "A partir del 31 de agosto de 2015, el alojamiento web en Google Drive para usuarios y desarrolladores quedará en desuso. Los clientes de Google Apps pueden continuar utilizando esta función durante un año hasta el 31 de agosto de 2016, cuando sirvan contenido a través de googledrive.com/host / doc id se suspenderá ". googleappsupdates.blogspot.com/2015/08/…
chrish
99
Desafortunadamente eso ya no funciona a partir de 2018.
Calimo
2
gdown.pl funcionó muy bien para mí también. Un vistazo rápido al script muestra que no está usando esa API, crea una nueva URL con un parámetro, export=downloadpor lo que debería ser bueno para el futuro previsible a menos que Google cambie ese esquema de URL
Ben Baron
234

Junio ​​2020

El file_iddebería verse como 0Bz8a_Dbh9QhbNU3SGlFaDg

Puede obtenerlo haciendo clic derecho en el archivo y luego en Obtener enlace para compartir. Solo funciona en archivos de acceso abierto (cualquier persona que tenga un enlace puede Ver). No funciona para directorios. Probado en Google Colab. Funciona mejor en la descarga de archivos. Use tar / zip para convertirlo en un solo archivo.

Ejemplo: para descargar el archivo Léame de este directorio

gdown https://drive.google.com/uc?id=0B7EVK8r0v71pOXBhSUdJWU1MYUk
fi
fuente
99
Basta con retirar export=download&desde gdown https://drive.google.com/uc?export=download&id=your_file_idy funciona como encanto
Saravanabalagi Ramachandran
8
¡Este funcionó en julio de 2018! Recuerde compartir el archivo y si tiene el enlace como drive.google.com/open?id=FILE_ID simplemente reemplace "abrir" con "uc" y simplemente gdown drive.google.com/uc?id=FILE_ID
simo23
77
¿Cómo podemos descargar una carpeta de Gdrive usando gdown?
usuario1
77
No funciona a partir de agosto de 2019. Error: "Permiso denegado: drive.google.com/uc?id=0B7EVK8r0v71pWEZsZE9oNnFzTm8 ¿ Quizás necesite cambiar el permiso sobre 'Cualquiera con el enlace'?" Y es el conjunto de datos CelebA descargable públicamente, por lo que debería estar bien. Obtuve el enlace de descarga haciendo clic en 'obtener enlace compartible' y luego dijo 'compartir enlace' y 'cualquiera con el enlace puede verlo'. Parece que el permiso ya está otorgado pero el error dice que el permiso fue denegado. Aquí está el sitio de host si quieres probarlo: mmlab.ie.cuhk.edu.hk/projects/CelebA.html
Kristof
66
Esta es la única solución de la media docena que probé que funciona. Necesita ser votado al primero. Solo necesitaba cambiar el 'enlace compartido' de: drive.google.com/open?id=XXXX a drive.google.com/uc?id=XXXX
deprekate el
194

Escribí un fragmento de Python que descarga un archivo de Google Drive, dado un enlace para compartir . Funciona, a partir de agosto de 2017 .

El recortado no usa gdrive , ni la API de Google Drive. Utiliza el módulo de solicitudes .

Al descargar archivos grandes de Google Drive, una sola solicitud GET no es suficiente. Se necesita un segundo, y este tiene un parámetro de URL adicional llamado confirmar , cuyo valor debe ser igual al valor de una determinada 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)
turdus-merula
fuente
Estoy ejecutando el fragmento python snippet.py file_id destination. ¿Es esta la forma correcta de ejecutarlo? Porque si el destino es una carpeta, me arroja un error. Si formo un archivo y lo uso como destino, el fragmento parece funcionar bien pero no hace nada.
Manfredo
2
@Manfredo, necesita el nombre del archivo en el que desea guardar el archivo, ya que, por ejemplo, $ python snippet.py your_google_file_id /your/full/path/and/filename.xlsx me funcionó. en caso de que no funcione, ¿tiene alguna salida disponible? ¿Se crea algún archivo?
Jeff
1
@CiprianTomoiaga Tengo el 90% de una barra de progreso funcionando, usando el módulo tqdm Python. Hice una idea esencial: gist.github.com/joshtch/8e51c6d40b1e3205d1bb2eea18fb57ae . Desafortunadamente, no he encontrado una forma confiable de obtener el tamaño total del archivo, que necesitará para calcular el% de progreso y el tiempo estimado de finalización.
joshtch
Además, ¿qué tipo de autenticación utiliza el módulo de solicitudes para acceder a las unidades de Google? OAuth? Por ejemplo, ¿en qué parte de su código anterior se maneja esto: request-oauthlib.readthedocs.io/en/latest/… ?
tauseef_CuriousGuy
77
¡Esto es asombroso! Aquí hay un consejo para drive_File_ID: https // drive.google.com / file / d / "drive_File_ID" / view - entre https ~~ file / d / y / view of the link de descarga.
Jaeyoung Lee
70

Puede usar la herramienta de línea de comandos de código abierto Linux / Unix gdrive.

Para instalarlo:

  1. Descargar el binario. Elija el que se adapte a su arquitectura, por ejemplogdrive-linux-x64.

  2. Cópialo a tu camino.

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

Para usarlo:

  1. Determine la ID del archivo de Google Drive. Para eso, haga clic derecho en el archivo deseado en el sitio web de Google Drive y elija "Obtener enlace ...". Volverá algo así https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H. Obtenga la cadena detrás de la ?id=y cópiela en su portapapeles. Esa es la identificación del archivo.

  2. Descargar el archivo. Por supuesto, use la ID de su archivo en el siguiente comando.

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

En el primer uso, la herramienta necesitará obtener permisos de acceso a la API de Google Drive. Para eso, le mostrará un enlace que debe visitar en un navegador, y luego obtendrá un código de verificación para copiar y pegar en la herramienta. La descarga se inicia automáticamente. No hay un indicador de progreso, pero puede observar el progreso en un administrador de archivos o en un segundo terminal.

Fuente: Un comentario de Tobi sobre otra respuesta aquí.

 

Truco adicional: limitación de velocidad. Para descargar gdrivea una velocidad máxima limitada (para no saturar la red ...), puede usar un comando como este ( pves PipeViewer ):

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

Esto mostrará la cantidad de datos descargados ( -b) y la velocidad de descarga ( -r) y limitará esa velocidad a 90 kiB / s ( -L 90k).

Tanius
fuente
mensaje de error: "Límite diario para uso no autenticado excedido. El uso continuado requiere registro", código: 403
Nianliang
@Nianliang Todavía no experimentó esto, pero aquí hay una suposición: usó gdrive para descargar un archivo de acceso público, por lo que no le pedirá autenticación al primer uso. Pruebe primero un archivo no público, asegúrese de que la autenticación sea exitosa (como se describe en la respuesta: "Al primer uso, ..."). ¿Ayudó?
tanius
3
No se puede obtener el código de verificación. Obtenga el error "Inicie sesión con Google temporalmente deshabilitado para esta aplicación. Esta aplicación aún no ha sido verificada por Google para usar Google Sign In".
useranon
1
El mismo mensaje de error aquí: "Esta aplicación aún no ha sido verificada por Google para usar Google Sign In".
gebbissimo
1
@useranon: Pruebe esta solución: github.com/gdrive-org/gdrive/issues/533#issuecomment-596336395 , debe crear una cuenta de servicio de google y compartir el archivo / carpeta con esta dirección de cuenta de servicio. Lo hice. Funciona a partir del 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}"  

¿Como funciona?
Obtenga el archivo cookie y el código html con curl.
Canalice html a grep y sed y busque el nombre del archivo.
Obtenga el código de confirmación del archivo cookie con awk.
Finalmente descargue el archivo con la cookie habilitada, confirme el código y el nombre del archivo.

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

Si no necesita variable de nombre de archivo, la curvatura puede adivinarlo
-L Seguir redirecciones
-O Nombre
remoto -J Nombre -encabezado 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}" 

Para extraer la ID del archivo de Google de la URL, puede usar:

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 
lapinpt
fuente
Muy bien hecho. Se deshizo de la advertencia de virus en un archivo de 5GB + cuando todas las otras respuestas fallaron.
1
Esto es fabuloso. Tuve que agregar la --insecureopción a ambas solicitudes de curl para que funcione.
Taylor R
@lapinpt ¿cómo agrego la funcionalidad RESUME?
steven7mwesigwa
¿Podemos de alguna manera deshacernos de la identificación de Google si tenemos un enlace público al archivo?
pez remo
42

Actualización a partir de marzo de 2018.

Probé varias técnicas dadas en otras respuestas para descargar mi archivo (6 GB) directamente desde la unidad de Google a mi instancia de AWS ec2, pero ninguna de ellas funciona (puede ser porque son viejas).

Entonces, para información de otros, así es como lo hice con éxito:

  1. Haga clic derecho en el archivo que desea descargar, haga clic en compartir, en la sección de compartir enlaces, seleccione "cualquiera con este enlace puede editar".
  2. Copia el enlace. Debe estar en este formato:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. Copie la parte FILEIDENTIFIER del enlace.
  4. Copie el siguiente script en un archivo. Utiliza curl y procesa la cookie para automatizar la descarga del archivo.

    #!/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 se muestra arriba, pegue el IDENTIFICADOR DE ARCHIVO en el script. ¡Recuerde mantener las comillas dobles!

  6. Proporcione un nombre para el archivo en lugar de FILENAME. Recuerde mantener las comillas dobles y también incluir la extensión en FILENAME (por ejemplo, myfile.zip).
  7. Ahora, guarde el archivo y haga que el archivo sea ejecutable ejecutando este comando en la terminal sudo chmod +x download-gdrive.sh.
  8. Ejecute el script usando `./download-gdrive.sh".

PD: Aquí está la esencia de Github para el script anterior: https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424

Amit Chahar
fuente
para wget reemplazar -ccon --save-cookiesy -bcon--load-cookies
untore
3
confirmó que esto funcionó para mí 👍, edité un poco para mayor claridad
Jeff Atwood
1
Funciona en enero de 2019. Necesitaba agregar "citas ${filename}en la última línea.
Jimbo
> Ejecutar el script usando ./download-gdrive.sh" Do not be like me and try to run the script by typing download-gdrive.sh , the . / `Parece ser obligatorio.
Ambroise Rabier
Trabajando en mayo de 2019
Kshitij Bajracharya
29

Aquí hay una forma rápida de hacer esto.

Asegúrese de que el enlace sea compartido, y se verá así:

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

Luego, copie ese FILEID y úselo así

wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME
thouliha
fuente
2
Hola, gracias por la respuesta. Si observa los archivos en el enlace que compartí, verá que si bien los archivos están compartidos, carecen de la etiqueta 'authuser = 0' en el enlace. ¡Su método no funcionó en los archivos proporcionados! Arjun
Arjun
2
Ni siquiera probé con acceso público, este funcionó bien para archivos compartidos de solo enlace atow. Lo usó así:wget 'https://docs.google.com/uc?export=download&id=SECRET_ID' -O 'filename.pdf'
Sampo Sarrala - codidact.org
No funciona a partir de 2018, estoy obteniendo la página web de escaneo antivirus en lugar del archivo.
Calimo
77
Me evita el escáner antivirus en 2018 cuando se usa con la -rbandera de wget. Así eswget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILE_ID' -O 'filename'
Artem Pelenitsyn
1
Funcionó para mí a partir del 10/2019 y fue la solución perfecta para obtener un archivo en un contenedor Docker en ejecución que casi no tiene aplicaciones de utilidad ejecutándose en él.
ammills01
23

El comportamiento predeterminado de Google Drive es escanear archivos en busca de virus si el archivo es demasiado grande, le preguntará al usuario y le notificará que el archivo no se pudo escanear.

Por el momento, la única solución que encontré es compartir el archivo con la web y crear un recurso web.

Cita de la página de ayuda de Google Drive:

Con Drive, puede hacer que los recursos web, como archivos HTML, CSS y Javascript, se puedan ver como un sitio web.

Para alojar una página web con Drive:

  1. Abra Drive en drive.google.com y seleccione un archivo.
  2. Haz clic en el botón Compartir en la parte superior de la página.
  3. Haga clic en Avanzado en la esquina inferior derecha del cuadro para compartir.
  4. Haga clic en Cambiar ...
  5. Elija On - Public en la web y haga clic en Guardar .
  6. Antes de cerrar el cuadro para compartir, copie la ID del documento desde la URL en el campo debajo de "Enlace para compartir". La identificación del documento es una cadena de letras mayúsculas y minúsculas y números entre barras en la URL.
  7. Comparta la URL que se parece a "www.googledrive.com/host/[doc id] donde [doc id] se reemplaza por la ID del documento que copió en el paso 6.
    Ahora cualquiera puede ver su página web.

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

Entonces, por ejemplo, cuando comparte un archivo en Google Drive públicamente, el enlace Sharelink se ve así:

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

Luego copia la identificación del archivo y crea un linke de googledrive.com que se ve así:

https://www.googledrive.com/host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U
Alex
fuente
1
@ FıratKÜÇÜK ¿está seguro de que tenía el formato de URL correcto? (tenga en cuenta www.googledrive.com y no drive.google.com) Acabo de intentarlo y funcionó.
Charles Forest
Mi archivo tiene más de 50 MB. pide una confirmación de escaneo de virus. Entonces la solución no es adecuada para mi caso. En cambio, utilicé la solución de aplicación de consola "gdrive".
Fırat KÜÇÜK
@ FıratKÜÇÜK Acabo de descargar un archivo de más de 200 Mb con este método que normalmente activaría la verificación de virus. Obtuve la identificación haciendo clic derecho> "obtener enlace para compartir".
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
@Alex http 502 para ese googledrive.com/host/0BwPIpgeJ2AdnUGUzVGJuak5abDg
usuario2284570
11
Esta característica está en desuso y ya no es compatible
Daniel G
19

La manera fácil:

(si solo lo necesita para una descarga única)

  1. Vaya a la página web de Google Drive que tiene el enlace de descarga
  2. Abra la consola de su navegador y vaya a la pestaña "red"
  3. Haga clic en el enlace de descarga.
  4. Espere a que el archivo comience a descargarse, y encuentre la solicitud correspondiente (debe ser la última en la lista), luego puede cancelar la descarga
  5. Haga clic derecho sobre la solicitud y haga clic en "Copiar como cURL" (o similar)

Deberías terminar con algo como:

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

Péguelo en su consola, agréguelo > my-file-name.extensional final (de lo contrario, escribirá el archivo en su consola), luego presione enter :)


fuente
Trabajó en junio de 2019
techkuz
Funciona a partir de febrero de 2020
Jivan
12

Basado en la respuesta de Roshan Sethia

Mayo 2018

Usando WGET :

  1. Cree un script de shell llamado wgetgdrive.sh como se muestra a continuación:

    #!/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. Otorgue los permisos correctos para ejecutar el script

  3. En la terminal, ejecute:

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

    por ejemplo:

    ./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
    
Aatif Khan
fuente
1
Esto funciona como CHARM gracias, y para facilitar las cosas:chmod 770 wgetgdrive.sh
Mohamed Kawsara
8

--ACTUALIZADO--

Para descargar el archivo primero obtenga youtube-dlPython desde aquí:

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

o instalarlo con pip:

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

ACTUALIZAR:

Me acabo de enterar de esto:

  1. Haga clic derecho en el archivo que desea descargar desde drive.google.com

  2. Hacer clic Get Sharable link

  3. Activar Link sharing on

  4. Haga clic en Sharing settings

  5. Haga clic en el menú desplegable superior para ver las opciones.

  6. Haga clic en más

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

  8. Copiar link

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

Copie la identificación después de https://drive.google.com/file/d/:

3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR

Pegue esto en la línea de comando:

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

Pega la identificación detrá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 eso ayude

jturi
fuente
1
hola, gracias. Intenté esto y se está descargando cuando ejecuto desde el símbolo del sistema, pero ¿hay alguna manera de obtener el "enlace directo" real para acceder a un servidor? Estoy tratando de ejecutarlo con el nodo {spawn}, pero luego tiene que descargarlo al servidor del nodo, y desde allí descargarlo nuevamente, ¿hay alguna manera de obtener simplemente un enlace de descarga directa desde Google Drive? ¿Qué enlace usan?
bluejayke
Ahora tengo que usar mucho este método, así que intentaré automatizarlo por completo. Simplemente obtenga el enlace de Google y un script de Python hará el resto. Creo que usaré selenio para hacer esto. Actualizaré mi solución cuando esté funcionando.
jturi
Actualicé mi respuesta. Esto ahora es tan simple como 2 clics para descargar cualquier archivo con youtube-dl.
jturi
7

Ninguna respuesta propone lo que funciona para mí a partir de diciembre de 2016 ( fuente ):

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

siempre que el archivo de Google Drive se haya compartido con quienes tengan el enlace y {FileID}sea ​​la cadena detrás ?id=de la URL compartida.

Aunque no verifiqué con archivos enormes, creo que podría ser útil saberlo.

mmj
fuente
Hmmm ... no funcionó para mí :( Solo descarga contenido web - no el archivo
kgingeri
1
curl -L -o {filename} https://drive.google.com/uc?id={FileID}funcionó para mí, gracias!
Dário
Esto no funciona para mi. Mi enlace está debajo (cualquiera con el enlace puede ver): drive.google.com/file/d/0B7Jh6M91b83bdFlWX2RIU2hYSWM/… . Intenté: <code> curl -O -J -L drive.google.com/uc?id=0B7Jh6M91b83bdFlWX2RIU2hYSWM </code> y obtuve este resultado: curl: (56) Recibí el código HTTP 403 del proxy después de CONNECT
Steve
77
Solo funciona para archivos de hasta 25 MB, los archivos más grandes dan una página de advertencia de detección de virus
cen
6

La forma más fácil es:

  1. Crear enlace de descarga y copiar ID de archivo
  2. Descargar 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
maníaco
fuente
1
Muchas gracias! Increíblemente útil
Nicholas Pipitone el
6

Las respuestas anteriores están desactualizadas para abril de 2020, ya que Google Drive ahora usa una redirección a la ubicación real del archivo.

Trabajando a partir de abril de 2020 en 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>
danieltan95
fuente
1
download-google-2funciona para mi. Mi archivo tiene un tamaño 3G. Gracias @ danieltan95
Saurabh Kumar
Actualicé download-google-2el último rizo a esto curl -L -b .tmp/$1cookies -C - "https://drive.google.com/uc?export=download&confirm=$code&id=$1" -o $2;y ahora puede reanudar la descarga.
ssi-anik
Parece que algo salió mal con la descarga en baja velocidad. Otro enfoque que encontré. qr.ae/pNrPaJ
ssi-anik
5

Tuve el mismo problema con Google Drive.

Así es como resolví el problema usando Links 2 .

  1. Abra un navegador en su PC, navegue hasta su archivo en Google Drive. Dele a su archivo un enlace público.

  2. Copie el enlace público a su portapapeles (por ejemplo, clic derecho, Copiar dirección del enlace)

  3. Abre una terminal. Si está descargando a otra PC / servidor / máquina, debe usar SSH en este punto

  4. Instale Links 2 (método debian / ubuntu, use su distribución o equivalente de SO)

    sudo apt-get install links2

  5. Pegue el enlace en su terminal y ábralo con Enlaces así:

    links2 "paste url here"

  6. Navegue hasta el enlace de descarga dentro de Enlaces con las teclas de flecha y presione Enter

  7. Elija un nombre de archivo y descargará su archivo

mattbell87
fuente
Linkstotalmente hizo el truco! Y es mucho mejor quew3m
alvas
1
¡Esto es lo único que funcionó para mí! Febrero de 2019. La aplicación gdown en los comentarios anteriores está alojada por nada menos que Google Docs, por lo que también es imposible descargarla.
Steven
5

Usa youtube-dl !

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

También puede pasar --get-urlpara obtener una URL de descarga directa.

aularon
fuente
1
@Ender todavía funciona para mí youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [GoogleDrive] ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Downloading webpage. tal vez tenga una versión desactualizada youtube-dlo el formato de enlace no sea reconocido por alguna razón ... Intente usar el formato anterior reemplazando la identificación con la identificación del archivo de su URL original
aularon
5

He estado usando el fragmento de rizo de @ Amit Chahar, quien publicó una buena respuesta en este hilo. Me pareció útil ponerlo en una función bash en lugar de un .sharchivo 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 puede incluirse, por ejemplo, en a ~/.bashrc(después de obtenerlo, por supuesto, si no se obtiene automáticamente) y usarse de la siguiente manera

   $ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar
mher
fuente
Esta es probablemente la mejor respuesta ... la reducción de Python es tan pesada en comparación. Debo decir que estoy bastante descontento con gdrive ...
smaudet
1
No necesita -f ni -r en su comando rm. Si le enseñas a la gente a simplemente "rm -rf", podrían terminar quitando cosas que quieren conservar ...
Josch
4

Hay un cliente multiplataforma de código abierto, escrito en Go: drive . Es bastante agradable y completo, y también está en desarrollo activo.

$ 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`
Utgarda
fuente
4

Todas las respuestas anteriores parecen oscurecer la simplicidad de la respuesta o tienen algunos matices que no se explican.

Si el archivo se comparte públicamente, puede generar un enlace de descarga directa con solo conocer la ID del archivo. La URL debe tener el formato " https://drive.google.com/uc?id=[FILEIDfont>&export=download " Esto funciona a partir del 22/11/2019. Esto no requiere que el receptor inicie sesión en Google, pero sí requiere que el archivo se comparta públicamente.

  1. En su navegador, navegue a drive.google.com.

  2. Haga clic derecho en el archivo y haga clic en "Obtener un enlace para compartir"

Haga clic derecho en el enlace para compartir

  1. Abra una nueva pestaña, seleccione la barra de direcciones y pegue el contenido de su portapapeles, que será el enlace que se puede compartir. Verá el archivo que muestra el visor de Google. El ID es el número justo antes del componente "Ver" de la URL:

ingrese la descripción de la imagen aquí

  1. Edite la URL para que esté en el siguiente formato, reemplazando "[FILEID]" con la ID de su archivo compartido:

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

  2. Ese es tu enlace de descarga directa. Si hace clic en él en su navegador, el archivo ahora será "empujado" a su navegador, abriendo el cuadro de diálogo de descarga, permitiéndole guardar o abrir el archivo. También puede usar este enlace en sus scripts de descarga.

  3. Entonces el comando curl equivalente sería:

curl -L "https://drive.google.com/uc?id=AgOATNfjpovfFrft9QYa-P1IeF9e7GWcH&export=download" > phlat-1.0.tar.gz
CodificadorAzul
fuente
2
Esto no funciona para archivos grandes: obtenga el errorGoogle 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
Esto funcionó. ¡Gracias! Después de convertir el enlace a ese formato, también puede usar gdown como se muestra en otras respuestas
Harry M
3

No pude hacer funcionar el script perl de Nanoix, u otros ejemplos curl que había visto, así que comencé a buscar en la API yo mismo en Python. Esto funcionó bien para archivos pequeños, pero los archivos grandes se atragantaron con el RAM disponible, por lo que encontré otro buen código de fragmentación que usa la capacidad de la API para la descarga parcial. Gist aquí: https://gist.github.com/csik/c4c90987224150e4a0b2

Tenga en cuenta el bit sobre la descarga del archivo client_secret json desde la interfaz API a su directorio local.

Fuente
$ 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) 
robótico
fuente
3

Aquí hay un pequeño script de bash que escribí que hace el trabajo hoy. Funciona en archivos grandes y también puede reanudar archivos parcialmente recuperados. Se necesitan dos argumentos, el primero es el file_id y el segundo es el nombre del archivo de salida. Las principales mejoras sobre las respuestas anteriores aquí son que funciona en archivos grandes y solo necesita herramientas comúnmente disponibles: bash, curl, tr, grep, du, cut y 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
Christoforo gris
fuente
Bienvenido a SO. Si ha utilizado alguna referencia para este propósito, inclúyala en su respuesta. De todos modos, buen trabajo +1
M--
3

Esto funciona a partir de noviembre 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
ppetraki
fuente
Aunque hay una "URL de origen" y hay algún análisis, no traté de entender que funcionó simplemente usando lo que aquí se llama fileid y en otras respuestas como primer parámetro.
Jan
@jan Eso puede significar que hay más de un estilo de URL. Me alegro de que todavía te haya funcionado.
ppetraki
3

Después de jugar con esta basura. He encontrado una manera de descargar mi dulce archivo usando las herramientas de desarrollo de Chrome.

  1. En la pestaña de Google Docs, Ctr + Shift + J (Configuración -> Herramientas para desarrolladores)
  2. Cambiar a pestañas de red
  3. En su archivo de documentos, haga clic en "Descargar" -> Descargar como CSV, xlsx, ....
  4. Le mostrará la solicitud en la consola "Red" ingrese la descripción de la imagen aquí

  5. Haga clic derecho -> Copiar -> Copiar como Curl

  6. Su comando Curl será así y se agregará -opara crear un archivo 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

Resuelto!

Ender
fuente
ese enlace caduca y es solo para 1 dirección IP a la vez
bluejayke
Simplemente puede realizar una solicitud silenciosa constante para mantener viva la sesión. @bluejayke
Ender
Hice exactamente eso y cuando vine aquí para escribir otra respuesta, me topé con la tuya. Confirmo que funciona con diferentes IP, ya que necesitaba descargar un archivo de 36 gb al servidor que no tiene un navegador. Y extraje el enlace de mi computadora portátil.
dmitry502
2

Aquí hay una solución alternativa que se me ocurrió descargar archivos de Google Drive a mi shell de Google Cloud Linux.

  1. Comparta el archivo a PÚBLICO y con permisos de edición utilizando el uso compartido avanzado.
  2. Obtendrá un enlace para compartir que tendría una identificación. Vea el enlace: - drive.google.com/file/d/[IDfont>/view?usp=sharing
  3. Copie esa ID y péguela en el siguiente enlace: -

googledrive.com/host/[ID]

  1. El enlace de arriba sería nuestro enlace de descarga.
  2. Use wget para descargar el archivo: -

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

  1. Este comando descargará el archivo con el nombre [ID] sin extensión y con el mismo tamaño de archivo en la misma ubicación donde ejecutó el comando wget.
  2. En realidad, descargué una carpeta comprimida en mi práctica. así que cambié el nombre de ese archivo incómodo usando:

mv [ID] 1.zip

  1. luego usando

descomprimir 1.zip

vamos a obtener los archivos

Vikas Gautam
fuente
http 502 para ese googledrive.com/host/0BwPIpgeJ2AdnUGUzVGJuak5abDg
usuario2284570
Google ha eliminado el alojamiento del disco, por lo que esto ya no funciona.
kgingeri
2

Encontré una solución que funciona para esto ... Simplemente use lo siguiente

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
Roshan Sethia
fuente
al hacer esto recibo ADVERTENCIA: no puedo verificar el certificado de docs.google.com, emitido por `/ C = US / O = Google Trust Services / CN = Google Internet Authority G3 ': no ​​se puede verificar localmente la autoridad del emisor. Solicitud HTTP enviada, esperando respuesta ... 404 No encontrado 2019-02-08 02:56:30 ERROR 404: No encontrado. alguna solución?
bluejayke
¡GUAUU! Gran respuesta y muy lógica. Gracias por escribirlo. Descargué el archivo de 1.3 GB usando este comando ... Modo completamente automático desde la terminal de Linux solo con este comando. También probé en GCP. Funciona muy bien allí también. Año 2020 ... Creo que esta es la forma correcta ... incluso si cambian un poco de comandos, esto debería resistir el paso del tiempo.
Atta Jutt
2

Hay una manera más fácil.

Instale cliget / CURLWGET desde la extensión firefox / chrome.

Descargue el archivo del navegador. Esto crea un enlace curl / wget que recuerda las cookies y los encabezados utilizados al descargar el archivo. Use este comando desde cualquier shell para descargar

Si
fuente
Esta es sin duda la forma más fácil y sencilla.
c0degeas
2

la manera fácil de bajar archivos de Google Drive también puede descargar archivos en Colab

pip install gdown

import gdown

Luego

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/

Jadli
fuente
frio. pero, ¿en qué se diferencia de la respuesta de phi publicada más de un año antes que la tuya?
umläute
1

Mayo 2018 TRABAJANDO

Hola, basado en estos comentarios ... creo un bash para exportar una lista de URL del archivo URLS.txt a un URLS_DECODED.txt y se usa en algún acelerador como flashget (uso cygwin para combinar windows y linux)

Se introdujo la araña de comandos para evitar la descarga y obtener el enlace final (directamente)

Comando GREP HEAD y CUT, procese y obtenga el enlace final, está basado en el idioma español, tal vez podría ser portador a IDIOMA INGLÉS

echo -e "$URL_TO_DOWNLOAD\r" probablemente el \ r es solo cywin y debe ser reemplazado por un \ n (línea de corte)

**********user*********** es la carpeta de usuario

*******Localización*********** está en idioma español, borra los asterianos y deja que la palabra en inglés se ubique y adapta THE HEAD y los números de CUT para un enfoque apropiado.

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
Sk.
fuente
1

Solo necesita usar wget con:

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

PD. El archivo debe ser público.

José Vallejo
fuente
0

skicka es una herramienta cli para cargar, descargar archivos de acceso desde una unidad de google.

ejemplo

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
Shubham Bhardwaj
fuente