wget / curl великий файл з Google Drive


305

Я намагаюся завантажити файл із google drive у сценарії, і у мене виникають невеликі проблеми з цим. Файли, які я намагаюся завантажити, тут .

Я широко розглядав Інтернет, і нарешті вдалося завантажити один з них. У мене з'явилися UID-файли, і менший (1,6 Мб) завантаження прекрасний, проте більший файл (3,7 ГБ) завжди перенаправляє на сторінку, яка запитує мене, чи хочу я продовжувати завантаження без сканування вірусу. Може хтось допоможе мені пройти цей екран?

Ось як я працював перший файл -

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

Коли я запускаю те саме в іншому файлі,

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

Я отримую такий вихід - введіть тут опис зображення

Я помічаю в третьому до останнього рядка посилання, там &confirm=JwkKє випадковий рядок 4 символів, але підказує, що є спосіб додати підтвердження до моєї URL-адреси. Одне із посилань, які я відвідав, запропонував, &confirm=no_antivirusале це не працює.

Сподіваюся, хтось тут може допомогти у цьому!


Ви можете, будь ласка, надати curl scriptвикористаний для завантаження файл, google driveоскільки я не в змозі завантажити робочий файл (зображення) з цього сценаріюcurl -u username:pass https://drive.google.com/open?id=0B0QQY4sFRhIDRk1LN3g2TjBIRU0 >image.jpg
Kasun Siyambalapitiya

Подивіться на прийняту відповідь. Я використав сценарій gdown.plgdown.pl https://drive.google.com/uc?export=download&confirm=yAjx&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM index4phlat.tar.gz
Арджун

2
Не бійтеся прокручувати! Ця відповідь забезпечує дуже хороший сценарій python, який можна завантажити за один раз.
Ciprian Tomoiagă

./gdrive завантажити [FILEID] [--рекурсивна, якщо папка], вона попросить вас отримати доступ до заданої URL-адреси та скопіювати вставити код токена.
roj4s

Відповіді:


59

УВАГА : Ця функція застаріла. Дивіться попередження нижче в коментарях.


Погляньте на це питання: Пряме завантаження з Диска Google за допомогою API Google Drive

В основному вам потрібно створити загальнодоступний каталог і отримати доступ до своїх файлів за відносним посиланням на щось подібне

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

Крім того, ви можете використовувати цей сценарій: https://github.com/circulosmeos/gdown.pl


5
ще один хороший спосіб - використовувати інструмент командного рядка linux "gdrive" github.com/prasmussen/gdrive
Tobi

1
Мені вдалося використати сценарій perl Nanolx у поєднанні з постійною посиланням на диску Google, створеною на сайті gdurl.com - Дякую!
jadik

14
ПОПЕРЕДЖЕННЯ: Підтримка веб-хостингу на Диску Google застаріла. "Починаючи з 31 серпня 2015 року, веб-хостинг на Диску Google для користувачів та розробників буде застарілим. Клієнти Google Apps можуть продовжувати використовувати цю функцію протягом одного року до 31 серпня 2016 року під час подання вмісту через googledrive.com/host / doc id буде припинено. " googleappsupdates.blogspot.com/2015/08/…
chrish

9
На жаль, це більше не працює з 2018 року.
Calimo

2
gdown.pl чудово працював і для мене. Швидкий перегляд сценарію показує, що він не використовує цей API, він створює нову URL-адресу з параметром, export=downloadтому це повинно бути добре в осяжному майбутньому, якщо Google не змінить цю схему URL-адрес
Бен Барон,

229

Червень 2020 року

file_idПовинен виглядати 0Bz8a_Dbh9QhbNU3SGlFaDg

Ви можете отримати його, клацнувши правою кнопкою миші на файл, а потім отримати посилання, яке можна ділитися. Працюйте лише над файлами з відкритим доступом (Перегляд може кожен, хто має посилання). Не працює для каталогів. Тестовано на Google Colab. Найкраще працює при завантаженні файлів. Використовуйте tar / zip, щоб зробити його єдиним файлом.

Приклад: завантажити файл readme з цього каталогу

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

9
Просто зніміть export=download&із себе, gdown https://drive.google.com/uc?export=download&id=your_file_idі це працює як шарм
Сараванабалагі Рамачандран

8
Цей працював у липні 2018 року! Не забудьте поділитися файлом, і якщо у вас є посилання як drive.google.com/open?id=FILE_ID, просто замініть "open" на "uc" та просто gdown drive.google.com/uc?id=FILE_ID
simo23

7
Як ми можемо завантажити папку з Gdrive за допомогою gdown?
user1

7
Не працює станом на серпень 2019 року. Помилка: "В дозволі відмовлено: drive.google.com/uc?id=0B7EVK8r0v71pWEZsZE9oNnFzTm8 Можливо, вам потрібно змінити дозвіл на" Усі, хто має посилання "?" І це загальнодоступний набір даних CelebA, тому він повинен бути нормальним. Я придбав посилання для завантаження, натиснувши "отримати доступ до спільного доступу", після чого він сказав "спільний доступ до посилань" і "кожен, хто має посилання, може його переглянути". Так виглядає, що дозвіл вже надано, але помилка говорить, що дозвіл відхилений. Ось хостинг-сайт, якщо ви хочете спробувати його: mmlab.ie.cuhk.edu.hk/projects/CelebA.html
Крістоф

6
Це єдине рішення з півдесятка, що я спробував, що працює. Це потрібно підняти до першого. Мені потрібно було лише змінити "спільне посилання" з: drive.google.com/open?id=XXXX to drive.google.com/uc?id=XXXX
застаріле

194

Я написав фрагмент Python, який завантажує файл з Google Drive, надавши доступне посилання . Він працює, станом на серпень 2017 року .

У фрагменті не використовується ні gdrive , ні API Google Drive. Він використовує модуль запитів .

Завантажуючи великі файли з Google Диска, одного запиту GET недостатньо. Другий потрібен, і цей має додатковий параметр URL, який називається підтвердження , значення якого має дорівнювати значенню певного файлу cookie.

import requests

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

        return None

    def save_response_content(response, destination):
        CHUNK_SIZE = 32768

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

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

    session = requests.Session()

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

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

    save_response_content(response, destination)    


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

Я запускаю фрагмент python snippet.py file_id destination. Це правильний спосіб його запуску? Причина, якщо адреса - це папка, я видав помилку. Якщо я жорсткий файл і використовую його як місце призначення, фрагмент, здається, працює добре, але тоді нічого не робить.
Manfredo

2
@Manfredo вам потрібна назва файлу, який ви хочете зберегти, як, наприклад, $ python snippet.py your_google_file_id /your/full/path/and/filename.xlsx працював для мене. у випадку, якщо це не працює, чи є у вас передбачені послуги? чи створюється якийсь файл?
Джефф

1
@CiprianTomoiaga У мене працює 90% панелі прогресу, використовуючи модуль Python tqdm. Я зробив суть: gist.github.com/joshtch/8e51c6d40b1e3205d1bb2eea18fb57ae . На жаль, я не знайшов надійного способу отримання загального розміру файлу, який вам знадобиться для обчислення% прогресу та приблизного часу завершення.
joshtch

Також, яку аутентифікацію використовує модуль запитів для доступу до google-накопичувачів? OAuth? Наприклад, де у вказаному вище коді обробляється цей запит - request-oauthlib.readthedocs.io/en/latest/… ?
tauseef_CuriousGuy

7
Це круто! Ось порада для drive_File_ID: https // drive.google.com / file / d / "drive_File_ID" / view - між файлами https ~~ / d / та / переглядом посилання для завантаження.
Jaeyoung Lee

70

Ви можете використовувати інструмент командного рядка з відкритим кодом Linux / Unix gdrive.

Щоб встановити його:

  1. Завантажте двійковий файл. Виберіть, наприклад, відповідну вашій архітектуріgdrive-linux-x64.

  2. Скопіюйте його на свій шлях.

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

Щоб використовувати його:

  1. Визначте ідентифікатор файлу Google Диска. Для цього клацніть правою кнопкою миші потрібний файл на веб-сайті Google Диска та оберіть «Отримати посилання…». Це поверне щось подібне https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H. Отримайте рядок позаду ?id=та скопіюйте її у буфер обміну. Це ідентифікатор файлу.

  2. Завантажте файл. Звичайно, використовуйте ідентифікатор вашого файлу замість цього в наступній команді.

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

При першому використанні інструменту потрібно отримати дозволи на доступ до API Google Drive. Для цього він покаже вам посилання, яке потрібно відвідати в браузері, і тоді ви отримаєте код підтвердження для копіювання та вставки назад до інструменту. Потім завантаження починається автоматично. Індикатора прогресу немає, але ви можете спостерігати за ходом роботи в файловому менеджері або другому терміналі.

Джерело: коментар Тобі щодо іншої відповіді тут.

 

Додатковий трюк: обмеження ставки. Для завантаження з gdriveобмеженою максимальною швидкістю (щоб не заграти мережу ...), ви можете використовувати таку команду, як ця ( pvє PipeViewer ):

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

Це покаже обсяг завантажених даних ( -b) та швидкість завантаження ( -r) та обмежить цю швидкість до 90 кіБ / с ( -L 90k).


повідомлення про помилку: "Перевищено щоденний ліміт для несанкціонованого використання. Для подальшого використання потрібна реєстрація.", код: 403
Nianliang

@Nianliang Це ще не виникло, але ось припущення: ви використовували gdrive для завантаження загальнодоступного файлу, тому він не просив би вас перевірити автентифікацію при першому використанні. Спробуйте спочатку непублічний файл, переконайтеся, що аутентифікація успішна (як описано у відповіді: "При першому використанні ..."). Чи допомогло це?
таніус

3
Не вдається отримати код підтвердження. Отримати помилку "Увійти в Google тимчасово відключено для цього додатка. Цей додаток ще не підтверджено Google, щоб використовувати Google Увійти."
усеранон

1
Тут же повідомлення про помилку: "Цей додаток ще не підтверджено Google для використання входу в Google."
gebbissimo

1
@useranon: Спробуйте це рішення: github.com/gdrive-org/gdrive/isissue/533#issuecomment-596336395 , вам потрібно створити обліковий запис служби google та поділитися файлом / папкою з цією адресою облікового запису служби. Я зробив це. Працює станом на 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}"  

Як це працює?
Отримайте файл cookie та html-код із завитком.
Трубопровідний файл htp grep і sed та пошук імені файлу.
Отримати код підтвердження з файлу cookie з awk.
Нарешті завантажте файл із увімкненим файлом cookie, підтвердіть код та ім'я файлу.

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

Якщо вам не потрібна змінна назва файлу curl, можна її вгадати
-L Дотримуйтесь переспрямування
-O Віддалене ім'я
-J Віддалене заголовок-ім'я

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

Для вилучення ідентифікатора файлу google з URL-адреси ви можете використовувати:

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

АБО

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 

Дуже красиво зроблено. Позбавлено від попередження про вірус у файлі 5 ГБ +, коли всі інші відповіді не вдалися.

1
Це приголомшливо. Мені довелося додати --insecureпараметр до обох запитів на вигин, щоб він працював.
Тейлор Р

@lapinpt Як додати функцію RESUME?
steven7mwesigwa

Чи можемо ми якось позбутися ідентифікатора google, якщо у нас є публічне посилання на файл?
морська риба

42

Оновлення станом на березень 2018 року.

Я спробував різні методи, наведені в інших відповідях, щоб завантажити свій файл (6 Гб) безпосередньо з диска Google на мій екземпляр AWS ec2, але жодна з них не працює (можливо, тому що вони старі).

Отже, для інформації інших, ось як я це зробив успішно:

  1. Клацніть правою кнопкою миші на файл, який ви хочете завантажити, натисніть "Поділитися", в розділі обміну посиланнями виберіть "будь-хто, хто має це посилання, може редагувати".
  2. Скопіюйте посилання. Він повинен бути у такому форматі:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. Скопіюйте частину FILEIDENTIFIER із посилання.
  4. Скопіюйте нижченаведений сценарій у файл. Він використовує curl та обробляє cookie для автоматизації завантаження файлу.

    #!/bin/bash
    fileid="FILEIDENTIFIER"
    filename="FILENAME"
    curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null
    curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}
    
  5. Як показано вище, вставте FILEIDENTIFIER у сценарій. Не забудьте зберегти подвійні цитати!

  6. Вкажіть ім'я файла замість FILENAME. Не забудьте зберегти подвійні лапки, а також додайте розширення у FILENAME (наприклад, myfile.zip).
  7. Тепер збережіть файл і зробіть файл виконуваним, запустивши цю команду в терміналі sudo chmod +x download-gdrive.sh.
  8. Запустіть скрипт, використовуючи `./download-gdrive.sh".

PS: Ось суть Github для вищезазначеного сценарію: https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424


для заміни wget -cна --save-cookiesта -bз--load-cookies
untore

3
підтвердив, що це працювало для мене 👍, відредагував трохи для ясності
Джефф Етвуд

1
Працює в січні 2019 року. Мені потрібно було додати "цитати ${filename}в останньому рядку.
Джимбо

> Запустіть скрипт за допомогою ./download-gdrive.sh" Do not be like me and try to run the script by typing download-gdrive.sh , the . / `, Здається, обов'язковий.
Амбруаз Rabier

Робота в травні 2019 року
Кшитій Байрачаря

29

Ось швидкий спосіб зробити це.

Переконайтесь, що посилання є спільним, і воно виглядатиме приблизно так:

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

Потім скопіюйте цей FILEID і використовуйте його так

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

2
Привіт, Дякую за відповідь Якщо ви подивитеся на файли за посиланням, яке я поділився, ви побачите, що в той час, коли файли спільно використовуються, у посиланні їм відсутній тег "authuser = 0". Ваш метод не працював на наданих файлах! Арджун
Арджун

2
Навіть не намагався із загальнодоступним доступом, цей файл добре працював для спільних файлів, що використовуються лише посиланнями. Використовували його так:wget 'https://docs.google.com/uc?export=download&id=SECRET_ID' -O 'filename.pdf'
Сампо Саррала - codidact.org

Не працює з 2018 року, я отримую веб-сторінку антивірусного сканування замість файлу.
Калімо

7
Він обходить антивірусний сканер для мене в 2018 році при використанні з -rпрапором wget. Так воно і єwget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILE_ID' -O 'filename'
Артем Пеленицин

1
Працював для мене станом на 10/2019 і був ідеальним рішенням для отримання файлу в запущений контейнер Docker, в якому майже не працює жодна програма утиліт.
ammills01

23

Поводження google за замовчуванням полягає у скануванні файлів на наявність вірусів, якщо файл великий, це підкаже користувачеві та сповістить його про те, що файл неможливо просканувати.

Наразі єдине знайдене нами рішення - це обмін файлом з Інтернетом та створення веб-ресурсу.

Цитата з довідкової сторінки диска google:

За допомогою Диска ви можете робити веб-ресурси - такі як HTML, CSS та файли Javascript - як веб-сайт.

Щоб розмістити веб-сторінку на Диску:

  1. Відкрийте Диск на сайті drive.google.com та виберіть файл.
  2. Натисніть кнопку Поділитися вгорі сторінки.
  3. Клацніть Додатково в нижньому правому куті вікна спільного доступу.
  4. Клацніть Змінити ....
  5. Виберіть Увімкнено - загальнодоступне в Інтернеті та натисніть Зберегти .
  6. Перш ніж закрити вікно спільного доступу, скопіюйте ідентифікатор документа з URL-адреси в поле нижче "Посилання для спільного доступу". Ідентифікатор документа - це рядок малих і малих літер та цифр між косими рядками в URL-адресі.
  7. Поділіться URL-адресою, що має вигляд "www.googledrive.com/host/ evidencedoc id], де [doc id] замінено ідентифікатором документа, який ви скопіювали на кроці 6.
    Тепер кожен може переглядати вашу веб-сторінку.

Знайдено тут: https://support.google.com/drive/answer/2881970?hl=uk

Так, наприклад, коли ви публічно ділитесь файлом на Google Drive, спільне посилання виглядає так:

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

Потім ви копіюєте ідентифікатор файлу та створюєте посилання googledrive.com, яке виглядає приблизно так:

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

1
@ FıratKÜÇÜK Ви впевнені, що у вас був правильний формат URL? (зверніть увагу на www.googledrive.com, а не drive.google.com) Я просто спробував, і це спрацювало.
Чарльз Форест

Мій файл перевищує 50 Мб. він запитує підтвердження вірусного сканування. Тож рішення не підходить для мого випадку. Натомість я застосував прикладне рішення консолі "gdrive".
Fırat KÜÇÜK

@ FıratKÜÇÜK Мені щойно вдалося завантажити файл 200+ Мб за допомогою цього методу, який, як правило, викликає перевірку вірусів. Я отримав ідентифікатор правою кнопкою миші> "отримати спільне посилання".
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功


11
Ця функція застаріла і більше не підтримується
Daniel G

19

Простий спосіб:

(якщо вам просто потрібно для одноразового завантаження)

  1. Перейдіть на веб-сторінку Диска Google, яка містить посилання для завантаження
  2. Відкрийте консоль браузера та перейдіть на вкладку «мережа»
  3. Клацніть посилання для завантаження
  4. Зачекайте, поки файл почне завантажуватися, і знайдіть відповідний запит (має бути останнім у списку), тоді ви можете скасувати завантаження
  5. Клацніть правою кнопкою миші на запиті та натисніть "Скопіювати як курс" (або подібне)

Ви повинні закінчити щось на кшталт:

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

Вставте його у консоль, додайте > my-file-name.extensionдо кінця (інакше він запише файл у вашу консоль), а потім натисніть клавішу Enter :)


Працював з червня 2019 року
техкуз

Працює станом на лютий 2020 року
Jivan

12

Спираючись на відповідь Рошана Сетія

Травень 2018 року

Використання WGET :

  1. Створіть сценарій оболонки під назвою wgetgdrive.sh, як показано нижче:

    #!/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. Надайте правильні дозволи на виконання сценарію

  3. У терміналі запустіть:

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

    наприклад:

    ./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
    

1
Це працює як ДЯКОВА подяка та полегшення речей:chmod 770 wgetgdrive.sh
Мохамед Кавсара

8

- НАДАДЕНО--

Щоб завантажити файл, спочатку знайдіть youtube-dlдля python звідси:

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

або встановити його за допомогою pip:

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

ОНОВЛЕННЯ:

Я щойно це з’ясував:

  1. Клацніть правою кнопкою миші файл, який ви хочете завантажити з drive.google.com

  2. Клацніть Get Sharable link

  3. Увімкнути Link sharing on

  4. Натисніть на Sharing settings

  5. Клацніть на верхньому спадному меню, щоб отримати параметри

  6. Клацніть Більше

  7. Виберіть [x] On - Anyone with a link

  8. Скопіювати посилання

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

Скопіюйте ідентифікатор після https://drive.google.com/file/d/:

3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR

Вставте це в командний рядок:

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

Вставте ідентифікатор позаду open?id=

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

Сподіваюся, це допомагає


1
привіт дякую, я спробував це, і це завантаження, коли я запускаю з командного рядка, але чи є спосіб отримати фактичне "пряме посилання", наприклад, для доступу на сервер? Я намагаюся запустити його з вузлом {spawn}, але потім його потрібно завантажити на сервер вузлів, і звідти завантажити його знову, чи є спосіб просто отримати пряме посилання для завантаження з диска google? Яке посилання вони використовують?
bluejayke

Зараз мені доводиться багато використовувати цей метод, тому я спробую його повністю автоматизувати. Просто перейдіть на посилання google, а все інше зробить сценарій Python. Думаю, я використаю селен для цього. Оновить моє рішення, коли воно працює.
jturi

Оновлено мою відповідь. Тепер це так просто, як 2 кліки для завантаження будь-яких файлів за допомогою youtube-dl.
jturi

7

Жодна відповідь не пропонує те, що працює для мене станом на грудень 2016 року ( джерело ):

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

за умови надання спільного доступу до файлу Google Диска тим, хто має посилання, і {FileID}є рядком поза ?id=в спільній URL-адресі.

Хоча я не перевіряв величезні файли, я вважаю, що це може бути корисно знати.


Гммм ... для мене не вийшло :( Просто завантажуйте веб-контент - не файл
kgingeri

1
curl -L -o {filename} https://drive.google.com/uc?id={FileID}працював на мене, дякую!
Даріо

Це не працює для мене. Мій посилання внизу (кожен, хто має посилання, може переглянути): drive.google.com/file/d/0B7Jh6M91b83bdFlWX2RIU2hYSWM/… . Я спробував: <code> curl -O -J -L drive.google.com/uc?id=0B7Jh6M91b83bdFlWX2RIU2hYSWM </code>, і я отримую такий результат: curl: (56) Отримав HTTP-код 403 від проксі після CONNECT
Steve

7
Працює лише для файлів розміром до 25 Мб, більші файли подають попереджувальну сторінку сканування вірусів
цент

6

Найпростіший спосіб:

  1. Створіть посилання для завантаження та скопіюйте fileID
  2. Завантажити за допомогою WGET: wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt

1
Дуже дякую! Неймовірно корисне
Микола

6

Вищенаведені відповіді застаріли на квітень 2020 року, оскільки диск Google зараз використовує переспрямування на фактичне розташування файлу.

Робота з квітня 2020 року на macOS 10.15.4 для публічних документів:

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

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

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

1
download-google-2працює для мене. Мій файл розміром 3G. Спасибі @ danieltan95
Кумар

Я оновив download-google-2останнє згортання до цього, curl -L -b .tmp/$1cookies -C - "https://drive.google.com/uc?export=download&confirm=$code&id=$1" -o $2;і тепер воно може відновити завантаження.
ssi-anik

Здається, щось завантажилось із завантаженням на низькій швидкості. інший підхід я знайшов. qr.ae/pNrPaJ
-anik

5

У мене була така ж проблема з Google Drive.

Ось як я вирішив проблему за допомогою посилань 2 .

  1. Відкрийте браузер на своєму ПК, перейдіть до свого файлу на Диску Google. Дайте вашому файлу загальнодоступне посилання.

  2. Скопіюйте загальнодоступне посилання у буфер обміну (наприклад, клацніть правою кнопкою миші, Скопіюйте адресу посилання)

  3. Відкрийте термінал. Якщо ви завантажуєте на інший ПК / сервер / машину, вам слід вказати SSH як цей пункт

  4. Встановіть посилання 2 (метод debian / ubuntu, використовуйте дистрибутив або еквівалент ОС)

    sudo apt-get install links2

  5. Вставте посилання у свій термінал і відкрийте його таким чином:

    links2 "paste url here"

  6. Перейдіть до посилання для завантаження у Посиланнях за допомогою клавіш зі стрілками та натисніть Enter

  7. Виберіть ім'я файлу, і воно завантажить ваш файл


Linksповністю зробив трюк! І це набагато краще, ніжw3m
alvas

1
Це єдине, що працювало на мене! Лютий 2019. Додаток gdown у попередніх коментарях розміщується не хтось інший, як документи Google, тому завантажувати його також неможливо.
Стівен

5

Використовуйте youtube-dl !

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

Ви також можете пройти, --get-urlщоб отримати URL-адресу прямого завантаження.


1
@Ender це все ще працює для мене youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [GoogleDrive] ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Downloading webpage. можливо у вас застаріла версія youtube-dlабо формат посилання чомусь не розпізнається ... Спробуйте скористатись вищезазначеним форматом, замінивши ідентифікатор файлу на ваш вихідний URL
aularon

5

Я використовую фрагмент curl @ Amit Chahar, який розмістив добру відповідь у цій темі. Мені здалося корисним поставити його в функцію bash, а не в окремий .shфайл

function curl_gdrive {

    GDRIVE_FILE_ID=$1
    DEST_PATH=$2

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

які можуть бути включені, наприклад, ~/.bashrc(після отримання звичайно, якщо вони не отримуються автоматично) і використовуються наступним чином

   $ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar

Це, мабуть, найкраща відповідь ... Гдаун пітона є настільки важким порівняно. Треба сказати, що я дуже незадоволений gdrive, хоча ...
smaudet

1
Вам не потрібно ні -f, ні -r у вашій команді rm. Якщо ви навчите людей просто завжди "rm -rf", вони можуть закінчити видалення речей, які вони хочуть зберегти ...
Josch

4

Там є багатоплатформенний клієнт з відкритим кодом, написаний на Go: drive . Це досить приємно і повноцінно, а також знаходиться в активному розвитку.

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

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

* For usage flags: `drive pull -h`

4

Усі вищезазначені відповіді, схоже, затьмарюють простоту відповіді або мають деякі нюанси, які не пояснюються.

Якщо файл надається загальнодоступному, ви можете створити пряме посилання для завантаження, просто дізнавшись ідентифікатор файла. URL-адреса має бути у формі " https://drive.google.com/uc?id= evidenceFILEID-puzzle&export=download" Це працює станом на 22-29-2019 роки. Для цього не потрібно, щоб одержувач входив у google, але вимагає, щоб файл був відкритим.

  1. У веб-переглядачі перейдіть на сторінку drive.google.com.

  2. Клацніть правою кнопкою миші на файл та натисніть "Отримати доступ для спільного використання"

Клацніть правою кнопкою миші отримати спільне посилання

  1. Відкрийте нову вкладку, виберіть адресний рядок і вставте вміст буфера обміну, який буде спільним для зв'язку. Ви побачите файл, який відображається глядачем Google. Ідентифікатор - це число безпосередньо перед компонентом "Перегляд" URL-адреси:

введіть тут опис зображення

  1. Відредагуйте URL-адресу, щоб вона була у наступному форматі, замінивши "[FILEID]" на ідентифікатор вашого спільного файлу:

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

  2. Це ваше пряме посилання для завантаження. Якщо ви натиснете на нього у вашому браузері, файл тепер буде "натиснений" на ваш браузер, відкривши діалогове вікно завантаження, що дозволяє зберегти або відкрити файл. Ви також можете використовувати це посилання у сценаріях завантаження.

  3. Отже, еквівалентною командою curl буде:

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

2
Це не працює для великих файлів: отримати помилкуGoogle 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

Це спрацювало. Дякую! Перетворивши посилання на цей формат, ви також можете використовувати gdown, як показано в інших відповідях
Гаррі М

3

Мені не вдалося змусити сценарій Perl Nanoix працювати, або інші приклади завитків, які я бачив, тому я почав шукати api в python. Це спрацювало чудово для невеликих файлів, але великі файли задушилися за минулий доступний оперативної пам’яті, тому я знайшов ще якийсь приємний фрагмент коду, який використовує можливість api для часткового завантаження. Суть тут: https://gist.github.com/csik/c4c90987224150e4a0b2

Зверніть увагу на завантаження файлу client_secret json з інтерфейсу API у ваш локальний каталог.

Джерело
$ cat gdrive_dl.py
from pydrive.auth import GoogleAuth  
from pydrive.drive import GoogleDrive    

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

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

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


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

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

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

3

Ось невеликий скрипт-баш, який я написав, який робить роботу сьогодні. Він працює на великих файлах і також може відновити частково отримані файли. Він займає два аргументи, перший - file_id, а другий - назва вихідного файла. Основні вдосконалення порівняно з попередніми відповідями тут полягають у тому, що він працює на великих файлах і потребує лише загальнодоступних інструментів: bash, curl, tr, grep, du, cut та mv.

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

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

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

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

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

Ласкаво просимо до SO. Якщо ви використовували для цього будь-які посилання, будь ласка, включіть їх у свою відповідь. Так чи інакше, приємна робота +1
М--

3

Це працює з листопада 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

Хоча там зазначено "джерело URL" і є деякий аналіз, я не намагався зрозуміти, що він працював, просто використовуючи те, що тут називається fileid, та в інших відповідях як перший параметр.
січня

@jan Це може означати, що існує більше одного стилю URL. Я радий, що все ще працював на тебе над усім.
ppetraki

3

Після возитися з цим сміттям. Я знайшов спосіб завантажити свій солодкий файл за допомогою інструментів для розробників chrome.

  1. На вкладці Документи google Ctr + Shift + J (Налаштування -> Інструменти для розробників)
  2. Перехід на вкладки Мережа
  3. У файлі документів натисніть "Завантажити" -> Завантажити як CSV, xlsx, ....
  4. Він покаже вам запит у консолі "Мережа" введіть тут опис зображення

  5. Клацніть правою кнопкою миші -> Копіювати -> Копіювати як Curl

  6. Ваша команда Curl буде такою, і додайте -oдля створення експортованого файлу. 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

Вирішено!


термін дії цього посилання закінчується і є лише для 1 ip адреси за раз
bluejayke

Ви можете просто зробити беззвучне постійне прохання зберегти сеанс в живих. @bluejayke
Ендер

Я зробив саме це і, коли прийшов сюди написати ще одну відповідь, наткнувся на вашу. Я підтверджую, що він працює з різними IP-адресами, оскільки мені потрібно було завантажити 36gb-файл на сервер, який не має браузера. І я витяг посилання зі свого ноутбука.
dmitry502

2

Ось вирішення цього питання, який я придумав завантажити файли з Google Диска в свою оболонку Google Cloud Linux.

  1. Надішліть файл PUBLIC та дозволу на редагування за допомогою розширеного доступу.
  2. Ви отримаєте посилання для обміну, яке матиме ідентифікатор. Перейдіть за посиланням: - drive.google.com/file/d/ evidenceIDškar/view?usp=sharing
  3. Скопіюйте цей ідентифікатор та вставте його за наступним посиланням: -

googledrive.com/host/ evidenceID]

  1. Наведене вище посилання буде нашим посиланням для завантаження.
  2. Використовуйте wget, щоб завантажити файл: -

wget https://googledrive.com/host/ evidenceID ]

  1. Ця команда завантажить файл з ім'ям [ID] без розширення та з однаковим розміром файлу в тому самому місці, де ви запустили команду wget.
  2. Насправді я завантажив папку-блискавку у своїй практиці. тому я перейменував цей незручний файл за допомогою: -

mv [ID] 1.zip

  1. потім використовуючи

розпакувати 1.zip

ми отримаємо файли.



Google забрав хостинг з диска, тому це більше не працює.
kgingeri

2

Я знайшов робоче рішення для цього ... Просто скористайтеся наступним

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

при цьому я отримую ПОПЕРЕДЖЕННЯ: не можу перевірити сертифікат docs.google.com, виданий `/ C = US / O = Служби Google Trust / CN = Google Internet Authority G3 ': Неможливо локально перевірити повноваження емітента. HTTP-запит надісланий, очікуючи відповіді ... 404 Не знайдено 2019-02-08 02:56:30 ПОМИЛКА 404: Не знайдено. якісь обхідні шляхи?
bluejayke

ОЦЕ ТАК! Чудова відповідь і дуже логічно. Дякуємо, що написали його. Завантажений файл 1,3 Гб за допомогою цієї команди ... Повністю автоматичний режим з терміналу Linux тільки за допомогою цієї команди. Також випробували на GCP. Там також чудово працює. Рік 2020 ... Я вважаю, що це правильний шлях ... навіть якщо вони трохи змінить команди, це повинно випробовувати час.
Atta Jutt

2

Є простіший спосіб.

Встановіть cliget / CURLWGET з розширення firefox / chrome.

Завантажте файл із браузера. Це створює посилання curl / wget, яке запам'ятовує файли cookie та заголовки, які використовуються під час завантаження файлу. Використовуйте цю команду з будь-якої оболонки для завантаження


Це, без сумніву, найпростіший і найпростіший спосіб.
c0degeas

2

простий спосіб зменшити файл з диска google, ви також можете завантажити файл на colab

pip install gdown

import gdown

Тоді

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

або

fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c'

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

Документ https://pypi.org/project/gdown/


круто. але чим вона відрізняється від відповіді фі, що була розміщена за рік до вашого?
umläute

1

Травень 2018 року РОБОТА

Привіт, виходячи з цього коментаря ... я створю баш, щоб експортувати список URL-файлів з файлу URLS.txt до URLS_DECODED.txt, який використовується у деяких прискорювачах, таких як флешгет (я використовую cygwin для комбінування windows та linux)

Павук команд був введений, щоб уникнути завантаження та отримання остаточного посилання (безпосередньо)

Команда GREP HEAD і CUT, обробляйте і отримуйте остаточне посилання, базується на іспанській мові, можливо, ви могли б бути портом до АНГЛІЙСЬКОЇ МОВИ

echo -e "$URL_TO_DOWNLOAD\r" ймовірно, \ r є лише cywin і його слід замінити \ n (лінія перерви)

**********user*********** - це папка користувача

*******Localización*********** є іспанською мовою, очистіть зірочки та дозвольте цьому слові англійською мовою Розташувати та адаптуйте номери HEAD та CUT для відповідного підходу.

rm -rf /home/**********user***********/URLS_DECODED.txt
COUNTER=0
while read p; do 
    string=$p
    hash="${string#*id=}"
    hash="${hash%&*}"
    hash="${hash#*file/d/}"
    hash="${hash%/*}"
    let COUNTER=COUNTER+1
    echo "Enlace "$COUNTER" id="$hash
    URL_TO_DOWNLOAD=$(wget --spider --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id='$hash -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id="$hash 2>&1 | grep *******Localización***********: | head -c-13 | cut -c16-)
    rm -rf /tmp/cookies.txt
    echo -e "$URL_TO_DOWNLOAD\r" >> /home/**********user***********/URLS_DECODED.txt
    echo "Enlace "$COUNTER" URL="$URL_TO_DOWNLOAD
done < /home/**********user***********/URLS.txt

1

Вам просто потрібно використовувати wget з:

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

ПД. Файл повинен бути відкритим.


0

skicka - це інструмент для завантаження, завантаження файлів доступу з google-накопичувача.

приклад -

skicka download /Pictures/2014 ~/Pictures.copy/2014
10 / 10 [=====================================================] 100.00 % 
skicka: preparation time 1s, sync time 6s
skicka: updated 0 Drive files, 10 local files
skicka: 0 B read from disk, 16.18 MiB written to disk
skicka: 0 B uploaded (0 B/s), 16.18 MiB downloaded (2.33 MiB/s)
skicka: 50.23 MiB peak memory used
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.