google gdrive from files descargar con archivos archivo curl google-drive-sdk wget google-docs

gdrive - wget/curl archivo grande de la unidad de google



wget gdrive file (21)

La manera fácil:

(si solo lo necesita para una descarga única)

  1. Ir 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 (debería 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

Pasado en su consola, agregue > my-file-name.extension hasta el final (de lo contrario, escribirá el archivo en su consola), luego presione intro :)

Intento descargar un archivo de Google Drive en un script, y estoy teniendo problemas para hacerlo. Los archivos que intento descargar están here .

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

Así es como obtuve el primer archivo funcionando -

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

Cuando ejecuto el mismo en el otro archivo,

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

Obtengo el siguiente resultado:

&confirm=JwkK en la penúltima línea del enlace, hay un &confirm=JwkK que es una cadena aleatoria de 4 caracteres, pero sugiere que hay una forma de agregar una confirmación a mi URL. Uno de los enlaces que visité sugirió &confirm=no_antivirus pero eso no está funcionando.

¡Espero que alguien aquí pueda ayudar con esto!

Gracias por adelantado.


Actualización a partir de marzo de 2018.

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

Entonces, para la información de otros, aquí es cómo lo hice con éxito:

  1. Haga clic derecho en el archivo que desea descargar, haga clic en compartir, en la sección de intercambio de enlaces, seleccione "cualquier persona 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 (Esto se ve como algunos caracteres aleatorios).
  4. Copie la secuencia de comandos siguiente a 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 FILEIDENTIFIER en el script. Recuerde mantener comillas dobles.

  6. Dé un nombre para su archivo de salida 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 el terminal "sudo chmod + x download-script.sh". Reemplace "download-script.sh" con el nombre de archivo de su script.
  8. Ejecute el script usando "./download-script.sh". Nuevamente, reemplace "download-script.sh" con el nombre de archivo de su script.

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


Aquí hay un pequeño script bash que escribí que hace el trabajo hoy. Funciona en archivos grandes y también puede reanudar archivos parcialmente recuperados. Toma dos argumentos, el primero es el archivo_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


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

Asegúrate de que el enlace esté compartido y se verá más o menos así:

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

Luego, copie ese FILEID y úselo de esta manera

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


Aquí hay una solución que encontré descargar archivos de Google Drive a mi shell de Google Cloud Linux.

  1. Comparta el archivo en PUBLIC y con los permisos Editar usando el uso compartido avanzado.
  2. Obtendrá un enlace para compartir que tendrá una identificación. Ver el enlace: - drive.google.com/file/d/[ID]/view?usp=sharing
  3. Copie esa identificación 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 de [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 consulta. así que cambié el nombre de ese archivo incómodo usando:

mv [ID] 1.zip

  1. luego usando

descomprimir 1.zip

obtendremos los archivos.


Basado en la respuesta de Roshan Sethia

Mayo de 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. Da los permisos correctos para ejecutar el script

  3. En la terminal, ejecuta:

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

    por ejemplo:

    ./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip



El comportamiento predeterminado de Google Drive es escanear archivos en busca de virus si el archivo es demasiado grande y avisará al usuario 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 HTML, CSS y archivos Javascript, se puedan ver como un sitio web.

Para alojar una página web con Drive:

  1. Abre Drive en drive.google.com y selecciona un archivo.
  2. Haga 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. Haz clic en Cambiar ...
  5. Elija Encendido - Público en la web y haga clic en Guardar .
  6. Antes de cerrar el cuadro para compartir, copie el ID del documento de 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 [id. De documento] se reemplaza por la identificación del documento que copió en el paso 6.
    Cualquiera ahora puede ver tu página web.

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

Entonces, por ejemplo, cuando compartes un archivo en google drive públicamente, el sharelink se ve así:

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

A continuación, copie el ID del archivo y cree un linke de googledrive.com que se vea así:

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


Encontré una solución de trabajo para esto ... Simplemente use la 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


Escribí un fragmento de Python que descarga un archivo de Google Drive, dado un enlace que se puede 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 de gran tamaño 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 cierta 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)


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


Hay un cliente multiplataforma de fuente abierta, escrito en la drive Go :. Es bastante agradable y con todas las funciones, 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`


La forma más fácil es poner lo que quieras descargar en una carpeta. Comparte esa carpeta y luego toma la ID de carpeta de la barra de URL.

Luego vaya a https://googledrive.com/host/[ID] (Reemplace la ID con su ID de carpeta) Debería ver una lista de todos los archivos en esa carpeta, haga clic en la que desea descargar. Una descarga debe visitar su página de descarga (Ctrl + J en Chrome), luego desea copiar el enlace de descarga y luego usar wget "descargar enlace"

Disfruta :)


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

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

siempre que el archivo de Google Drive se haya compartido con los que tienen el enlace y {FileID} es la cadena detrás de ?id= en la URL compartida.

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


No pude hacer funcionar la secuencia de comandos perl de Nanoix u otros ejemplos de curl que había visto, así que comencé a buscar en la api en python. Esto funcionó bien para archivos pequeños, pero los archivos de gran tamaño se ahogaban con el RAM disponible, así que encontré otro buen código de fragmentación que utiliza la capacidad de la API para descargar parcialmente. Gist aquí: https://gist.github.com/csik/c4c90987224150e4a0b2

Tenga en cuenta el poco acerca de la descarga de 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://.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)


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

Para instalarlo:

  1. Download el binario. Elija el que se adapte a su arquitectura, por ejemplo gdrive-linux-x64 .

  2. Cópialo en tu camino.

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

Para usarlo:

  1. Determine el ID del archivo de Google Drive. Para eso, haga clic con el botón derecho en el archivo deseado en el sitio web de Google Drive y seleccione "Obtener enlace ...". Devolverá algo como https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H . Obtenga la cadena detrás de ?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 su lugar en el siguiente comando.

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H

Al primer uso, la herramienta deberá 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 de nuevo en la herramienta. La descarga se inicia automáticamente. No hay 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 con gdrive a una velocidad máxima limitada (para no saturar la red ...), puede usar un comando como este (usando 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 kibbs / s ( -L 90k ).


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. Dale a tu archivo un enlace público.

  2. Copie el enlace público a su portapapeles (por ejemplo, haga clic con el botón secundario, Copie la dirección del enlace)

  3. Abra una Terminal. Si está descargando a otra PC / servidor / máquina, debe SSH ya que este punto

  4. Instala Links 2 (método debian / ubuntu, usa tu distribución o equivalente de sistema operativo)

    sudo apt-get install links2

  5. Pegue el enlace en su terminal y ábralo con los enlaces como sigue:

    links2 "paste url here"

  6. Navegue hasta el enlace de descarga dentro de Enlaces usando las teclas de flecha y presione Entrar

  7. Elige un nombre de archivo y descargará tu archivo


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


Mayo de 2018 TRABAJANDO

Hola, basándome 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 algunos aceleradores como flashget (uso cygwin para combinar Windows y Linux)

Command araña se introdujo para evitar la descarga y obtener el enlace final (directamente)

Comando GREP HEAD y CUT, procesa y obtén el enlace final. Está basado en el idioma español. Tal vez podrías ser portador del 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 del usuario

*******Localización*********** está en idioma español, borre los asterics y deje que la palabra en inglés Ubique y adapte 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


Mayo de 2018

Si desea usar curl para descargar un archivo desde Google Drive, además del ID de archivo en la unidad, también necesita un OAuth2 access_token .

Un OAuth2 access_token potencialmente permite todo tipo de actividad, así que tenga cuidado con él. Además, el token se agota después de un corto tiempo (¿1 hora?) Pero no lo suficientemente corto como para evitar el abuso si alguien lo captura.

Una vez que tenga un access_token y el archivo, esto funcionará:

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

Ver también: API de Google Drive - REST - Descargar archivos


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 de cookie y el código html con curl.
Pasa html a grep y sed y busca 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 necesitas un rizo variable de nombre de archivo, puedes adivinarlo
-L Seguir redireccionamientos
-O nombre remoto
-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 extraer la ID de archivo de Google desde 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