Googleドライブからwget / curlの大きなファイル


306

スクリプトでGoogleドライブからファイルをダウンロードしようとしていますが、ダウンロードに少し問題があります。ダウンロードしようとしているファイルはこちらです。

私は広範囲にわたってオンラインで調べましたが、そのうちの1つをダウンロードすることができました。ファイルのUIDを取得し、小さいファイル(1.6MB)をダウンロードしても問題ありませんが、大きいファイル(3.7GB)は常に、ウイルススキャンなしでダウンロードを続行するかどうかを尋ねるページにリダイレクトします。誰かがその画面を通り抜けるのを手伝ってくれませんか?

これが私が最初のファイルを機能させる方法です-

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

次の出力が表示されます- ここに画像の説明を入力してください

リンクの3行目から最後の行に気づきました。&confirm=JwkKこれはランダムな4文字の文字列ですが、URLに確認を追加する方法があることを示唆しています。私が訪れたリンクの1つが提案しました&confirm=no_antivirusが、それは機能していません。

ここの誰かがこれを手伝ってくれることを願っています!


このスクリプトから作業ファイル(画像)をダウンロードできないのでcurl script、ファイルのダウンロードに使用したものを提供してくださいgoogle drivecurl -u username:pass https://drive.google.com/open?id=0B0QQY4sFRhIDRk1LN3g2TjBIRU0 >image.jpg
Kasun Siyambalapitiya '18

受け入れられた答えを見てください。私はgdown.plスクリプトを使用しましたgdown.pl https://drive.google.com/uc?export=download&confirm=yAjx&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM index4phlat.tar.gz
Arjun

2
スクロールすることを恐れないでください!この回答は、一度にダウンロードできる非常に優れたPythonスクリプトを提供します。
CiprianTomoiagă2016

./gdriveダウンロード[ファイルID] [-そのフォルダの場合は再帰的]指定されたURLにアクセスし、トークンコードをコピーして貼り付けるように求められます。
roj4s

回答:


59

警告:この機能は廃止されています。コメントの以下の警告を参照してください。


この質問を見てください:Google Drive APIを使用してGoogleドライブから直接ダウンロード

基本的には、パブリックディレクトリを作成し、次のような相対参照でファイルにアクセスする必要があります。

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

または、次のスクリプトを使用できます:https : //github.com/circulosmeos/gdown.pl


5
別の良い方法は、Linuxコマンドラインツール「gdrive」を使用することですgithub.com/prasmussen/gdrive
Tobi

1
Nanolxのperlスクリプトを、gdurl.comで作成されたGoogleドライブのパーマリンクと組み合わせて使用​​することができました 。
jadik 2015

14
警告:GoogleドライブでのWebホスティングサポートは非​​推奨になりました。「2015年8月31日以降、ユーザーおよびデベロッパー向けのGoogleドライブでのウェブホスティングはサポートが終了します。GoogleAppsのお客様は、googledrive.com / hostを介してコンテンツを提供する場合、2016年8月31日まで1年間この機能を引き続き使用できます。 / doc idは廃止されます。」 googleappsupdates.blogspot.com/2015/08/…– 2015
chrish

9
残念ながら、それは2018
以降

2
gdown.plも私にとってはうまくいきました。スクリプトをざっと見てみると、そのAPIを使用していないことがわかります。パラメーターを使用して新しいURLを作成するexport=downloadため、GoogleがそのURLスキームを変更しない限り、当面はそれが良いはずです
Ben Baron

233

2020年6月

file_id0Bz8a_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年7月に機能しました!ファイルを共有することを忘れないでください。リンクがdrive.google.com/open?id=FILE_IDである場合は、「open」を「uc」に置き換え、gdown drive.google.com/uc?id=FILE_ID
simo23

7
gdownを使用してGdriveからフォルダーをダウンロードするにはどうすればよいですか?
user1

7
2019年8月現在は機能しません。エラー:「アクセスが拒否されました:drive.google.com/uc?id=0B7EVK8r0v71pWEZsZE9oNnFzTm8「リンクを知っている全員」のアクセス権を変更する必要があるのではないですか?そして、それは一般にダウンロード可能なCelebAデータセットなので、問題ないはずです。「共有可能なリンクを取得」をクリックしてダウンロードリンクを取得したところ、「リンク共有がオンになっています」と表示され、「リンクを知っている全員が閲覧できます」と表示されました。そのため、許可はすでに付与されているようですが、エラーは許可が拒否されたことを示しています。試してみたいホストサイトは次のとおり
Kristof

6
これは私が試した6ダースのうち唯一の解決策です。最初に賛成する必要があります。「共有リンク」をdrive.google.com/open?id=XXXX から drive.google.com/uc?id=XXXX
廃止

194

共有可能なリンクを指定して、GoogleドライブからファイルをダウンロードするPythonスニペットを書きました。それは、作品2017年8月のよう

切り取られたものはgdriveもGoogle Drive APIも使用しません。それは要求モジュールを使用します。

Googleドライブから大きなファイルをダウンロードする場合、単一のGETリクエストでは不十分です。もう1つは必要であり、これにはconfirmという追加の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 tqdm Pythonモジュールを使用して、進行状況バーの90%が機能しています。私は要点を作りました:gist.github.com/joshtch/8e51c6d40b1e3205d1bb2eea18fb57ae。残念ながら、合計ファイルサイズを取得するための信頼できる方法は見つかりませんでした。これは、進行状況の%と推定完了時間を計算するために必要です。
joshtch 2018年

また、リクエストモジュールはGoogleドライブにアクセスするためにどのような認証を使用しますか?OAuth?たとえば、上記のコードのどこでこれが処理される-requests-oauthlib.readthedocs.io/en/latest/…
tauseef_CuriousGuy 2018

7
これはすごい!次に、drive_File_IDのヒントを示します。https// drive.google.com / file / d / "drive_File_ID" / view-https ~~ file / d /とダウンロードリンクの/ viewの間。
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ドライブのファイルIDを確認します。そのためには、Googleドライブのウェブサイトで目的のファイルを右クリックし、[リンクを取得]を選択します。それはのようなものを返しますhttps://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H。の後ろの文字列を取得?id=し、クリップボードにコピーします。これがファイルのIDです。

  2. ファイルをダウンロードします。もちろん、次のコマンドでは、代わりにファイルのIDを使用してください。

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

最初の使用時には、ツールはGoogle Drive APIへのアクセス許可を取得する必要があります。そのためには、ブラウザーでアクセスする必要のあるリンクが表示され、ツールにコピーして貼り付けるための確認コードが表示されます。その後、ダウンロードが自動的に開始されます。進行状況インジケータはありませんが、ファイルマネージャまたは2番目のターミナルで進行状況を確認できます。

ソース: Tobiによる別の回答についてのコメントはこちら。

 

追加のトリック:レート制限。でダウンロードするにはgdrive(ネットワークを圧迫しないように)制限された最大レートでには、次のようなコマンドを使用できます(pvis PipeViewer):

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

これにより、ダウンロードされたデータの量(-b)とダウンロードの速度()が表示され、-rその速度が90 kiB / sに制限されます(-L 90k)にます。


エラーメッセージ:「認証されていない使用の1日の制限を超えています。継続して使用するにはサインアップが必要です。」、コード:403
Nianliang

@Nianliangまだこれを体験していませんが、これは推測です:公にアクセス可能なファイルをダウンロードするためにgdriveを使用したため、最初の使用時に認証を要求しません。最初に非公開ファイルを試し、認証が成功することを確認します(回答:「最初の使用時…」で説明されています)。役に立ちましたか?
タニアス2016年

3
確認コードを取得できません。「このアプリではGoogleでのサインインが一時的に無効になっていますこのアプリは、Googleサインインを使用するために、Googleによってまだ確認されていません。」というエラーが表示されます。
useranon

1
同じエラーメッセージ:「このアプリは、Googleサインインを使用するために、Googleによってまだ確認されていません。」
gebbissimo

1
@useranon:次の解決策を試してください:github.com/gdrive-org/gdrive/issues/533#issuecomment-596336395、Googleサービスアカウントを作成し、このサービスアカウントアドレスでファイル/フォルダーを共有する必要があります。やったよ。2020年4月17日の時点で機能します!
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}"  

どのように機能しますか?
curlでcookieファイルとhtmlコードを取得します。
htmlをgrepおよびsedにパイプして、ファイル名を検索します。
awkでcookieファイルから確認コードを取得します。
最後に、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}" 

URLからgoogleファイルIDを抽出するには、以下を使用できます。

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 

とてもよくできました。他のすべての回答が失敗したときに、5GB以上のファイルに対するウイルス警告を取り除きました。

1
これは素晴らしいです。私は--insecureそれを機能させるために両方のカールリクエストにオプションを追加する必要がありました。
テイラーR

@lapinpt再開機能を追加するにはどうすればよいですか?
steven7mwesigwa

ファイルへのパブリックリンクがある場合、どういうわけかGoogle IDを取り除くことができますか?
oarfish

42

2018年3月現在のアップデート。

私のファイル(6 GB)を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 gistは次のとおりです:https : //gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424


wgetのは、置き換えのため-c--save-cookies-b--load-cookies
untore

3
これは私にとってうまくいくことを確認しました👍、明確にするために少し編集しました
Jeff Atwood

1
2019年1月に機能"します${filename}。最後の行に引用符を追加する必要がありました。
神保

> ./download-gdrive.sh" Do not be like me and try to run the script by typing download-gdrive.sh を使用してスクリプトを実行します, the 。/ `は必須のようです。
Ambroise Rabier


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
パブリックアクセスでさえ試みなかった、これはリンクのみの共有ファイルatowでうまく機能しました。このようにそれを使用:wget 'https://docs.google.com/uc?export=download&id=SECRET_ID' -O 'filename.pdf'
サンポSarrala - codidact.org

2018年現在機能していません。ファイルではなく、ウイルス対策スキャンのWebページが表示されます。
カリモ2018

7
2018年に-rフラグとともに使用すると、ウイルス対策スキャナーがバイパスされwgetます。そうですwget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILE_ID' -O 'filename'
Artem Pelenitsyn

1
2019年10月の時点で私のために働いており、ユーティリティアプリがほとんど実行されていない実行中のDockerコンテナーにファイルを取得するのに最適なソリューションでした。
ammills01

23

Googleドライブのデフォルトの動作では、ファイルが大きすぎる場合はウイルスをスキャンし、ユーザーにプロンプ​​トを表示して、ファイルをスキャンできなかったことを通知します。

現時点で私が見つけた唯一の回避策は、ファイルをWebと共有してWebリソースを作成することです。

グーグルドライブのヘルプページからの引用:

ドライブを使用すると、HTML、CSS、JavaScriptファイルなどのウェブリソースをウェブサイトとして表示できます。

ドライブでウェブページをホストするには:

  1. drive.google.comでドライブを開き、ファイルを選択します。
  2. ページの上部にある[ 共有 ]ボタンをクリックします。
  3. 共有ボックスの右下隅にある[ 詳細]をクリックします。
  4. [ 変更...]をクリックします。
  5. [ Web上で公開 ]を選択し、[ 保存 ]をクリックします
  6. 共有ボックスを閉じる前に、「共有するリンク」の下のフィールドのURLからドキュメントIDをコピーします。ドキュメントIDは、URLのスラッシュの間にある大文字と小文字および数字の文字列です。
  7. 「www.googledrive.com/host/[doc id]」のようなURLを共有します。[doc id]は、手順6でコピーしたドキュメントIDに置き換えられます。これで、
    誰でもWebページを表示できます。

ここにあります:https : //support.google.com/drive/answer/2881970?hl=en

たとえば、Googleドライブでファイルを公開して共有すると、共有リンクは次のようになります。

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

次に、ファイルIDをコピーして、次のようなgoogledrive.comリンクを作成します。

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

1
@FıratKÜÇÜKあなたはあなたが正しいURLフォーマットを持っていましたか?(www.googledrive.comであり、drive.google.comではないことに注意してください)試したところ、うまくいきました。
Charles Forest

ファイルが50 MBを超えています。ウイルススキャンの確認を求めます。したがって、このソリューションは私の場合には適していません。代わりに、「gdrive」コンソールアプリケーションソリューションを使用しました。
FıratKÜÇÜK

@FıratKÜÇÜK通常はウイルスチェックをトリガーするこの方法で200 MB以上のファイルをダウンロードできました。右クリックして「共有可能なリンクを取得」からIDを取得しました。
Ciro Santilli郝海东冠状病六四事件法轮功


11
この機能は廃止され、サポートされなくなりました
Daniel G

19

簡単な方法:

(1回限りのダウンロードで必要な場合のみ)

  1. ダウンロードリンクのあるGoogleドライブウェブページに移動します
  2. ブラウザコンソールを開き、[ネットワーク]タブに移動します
  3. ダウンロードリンクをクリックしてください
  4. ファイルがダウンロードを開始するのを待ち、対応するリクエスト(リストの最後のリクエストである必要があります)を見つけたら、ダウンロードをキャンセルできます。
  5. リクエストを右クリックして、[cURLとしてコピー](または同様の)をクリックします。

あなたは次のようなもので終わるはずです:

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

それをコンソールに貼り付け> my-file-name.extension、最後に追加します(そうしないと、ファイルがコンソールに書き込まれます)、Enterキーを押します:)


2019
techkuz

2020
ジバン

12

Roshan Sethiaからの回答に基づく

2018年5月

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
この事を容易にするCHARMのおかげで、など作品:chmod 770 wgetgdrive.sh
モハメドKawsara

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)

後にIDをコピーしhttps://drive.google.com/file/d/ます。

3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR

これをコマンドラインに貼り付けます。

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

後ろに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

私の答えを更新しました。これは、youtube-dlでファイルをダウンロードするために2回クリックするだけの簡単なものです。
jturi

7

2016年12月現在、私にとって何が有効かを示す回答はありません(出典)。

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

ただし、Googleドライブファイルがリンクを知っているユーザーと共有されており、共有URLの{FileID}背後?id=にある文字列である。

巨大なファイルについては確認しませんでしたが、知っておくと役に立ちます。


うーん...私にとってはうまく
いき

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)CONNECTの後、プロキシからHTTPコード403を受け取りました
Steve

7
最大25MBのファイルでのみ機能し、大きなファイルはウイルススキャンの警告ページを表示します
cen

6

最も簡単な方法は次のとおりです。

  1. 作成し、ダウンロードリンクとコピーのファイルIDを
  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

Googleドライブがファイルの実際の場所へのリダイレクトを使用するようになったため、上記の回答は2020年4月には古くなっています。

2020年4月現在、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
Saurabh Kumar

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
ssi-anik

5

Googleドライブでも同じ問題が発生しました。

これがリンク2を使用して問題を解決した方法です。

  1. PCでブラウザを開き、Googleドライブでファイルに移動します。ファイルに公開リンクを提供します。

  2. パブリックリンクをクリップボードにコピーします(右クリック、リンクアドレスのコピーなど)。

  3. ターミナルを開きます。別のPC /サーバー/マシンにダウンロードしている場合は、この時点でSSHする必要があります

  4. リンク2をインストールします(debian / ubuntuメソッド、ディストリビューションまたは同等のOSを使用)

    sudo apt-get install links2

  5. リンクを端末に貼り付けて、次のようなリンクで開きます。

    links2 "paste url here"

  6. 矢印キーを使用してリンク内のダウンロードリンクに移動し、 Enter

  7. ファイル名を選択すると、ファイルがダウンロードされます


Links完全にトリックをしました!そしてそれははるかにはるかに優れていますw3m
alvas '11年

1
これは私のために働いた唯一のものです!2019年2月。以前のコメントのgdownアプリは、他のgoogle docsによってホストされているため、ダウンロードすることもできません。
Steven

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か、リンク形式が何らかの理由で認識されない可能性があります...上記の形式を使用して、IDを元のURLのファイルIDに置き換えてみてください
aularon

5

私はこのスレッドで良い答えを投稿した@ 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

これがおそらく最良の答えです... python gdownは、比較するととても重いです。私はgdriveにかなり不満を持っていると言わなければなりません...
smaudet

1
rmコマンドに-fも-rも必要ありません。常に "rm -rf"を実行するように人々に教えると、最終的に保持したいものを削除してしまう可能性があります...
josch

4

Go:ドライブで書かれたオープンソースのマルチプラットフォームクライアントがあります。それは非常に素晴らしく、フル機能であり、活発に開発されています。

$ 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

上記のすべての回答は、回答の単純さを曖昧にしたり、説明されていないいくつかのニュアンスを持っているようです。

ファイルが公開されている場合は、ファイルIDを知っているだけで直接ダウンロードリンクを生成できます。URLは「https://drive.google.com/uc?id=[FILEID]&export=download」の形式にする必要があります。これは2019年11月22日以降機​​能します。これは、受信者がグーグルにログインすることを要求しませんが、ファイルが公に共有されることを要求します。

  1. ブラウザで、drive.google.comに移動します。

  2. ファイルを右クリックして、「共有可能なリンクを取得」をクリックします

右クリックして共有可能なリンクを取得

  1. 新しいタブを開き、アドレスバーを選択して、共有可能なリンクとなるクリップボードの内容を貼り付けます。Googleのビューアで表示されたファイルが表示されます。IDは、URLの「表示」コンポーネントの直前の番号です。

ここに画像の説明を入力してください

  1. 次の形式になるようにURLを編集します。「[FILEID]」を共有ファイルのIDに置き換えます。

    https://drive.google.com/uc?id=[FILEID]&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を使用することもできます
Harry M

3

Nanoixのperlスクリプトや他のカールの例を機能させることができなかったため、Pythonで自分でAPIを調べ始めました。これは小さなファイルでは問題なく機能しましたが、大きなファイルは利用可能なRAMを超えて窒息していたため、APIの部分的なダウンロード機能を使用する他の素晴らしいチャンキングコードを見つけました。ここに要旨:https : //gist.github.com/csik/c4c90987224150e4a0b2

APIインターフェースからローカルディレクトリにclient_secret jsonファイルをダウンロードする方法に注意してください。

ソース
$ 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

これが、今日作成した小さなbashスクリプトです。大きなファイルで動作し、部分的にフェッチされたファイルも再開できます。2つの引数を取ります。1つはfile_idで、2つ目は出力ファイルの名前です。ここでの以前の回答に対する主な改善点は、大きなファイルで機能し、一般的に利用可能なツール(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
M-- 2017

3

これは2017年11月時点で機能し ます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と呼ばれるものを直接使用するだけで機能することを理解しようとはしませんでした。
2017年

@jan複数のURLスタイルがあることを意味する場合があります。引き続き問題なくご利用いただけます。
ppetraki 2017年

3

このゴミをいじってみたところ。Chrome-開発者ツールを使用して甘いファイルをダウンロードする方法を見つけました。

  1. あなたのグーグルドキュメントタブで、Ctr + Shift + J(設定->開発者ツール)
  2. ネットワークタブに切り替え
  3. ドキュメントファイルで、[ダウンロード]-> [CSV、xlsxとしてダウンロード...]をクリックします。
  4. 「ネットワーク」コンソールにリクエストが表示されます ここに画像の説明を入力してください

  5. 右クリック->コピー->カールとしてコピー

  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
エンダー

私はまさにそれをしました、そして別の答えを書くためにここに来たとき、あなたの答えに出会いました。ブラウザのないサーバーに36GBファイルをダウンロードする必要があったので、さまざまなIPで動作することを確認しました。ラップトップからリンクを抽出しました。
dmitry502

2

これが、GoogleドライブからGoogle Cloud Linuxシェルにファイルをダウンロードするための回避策です。

  1. ファイルをPUBLICで共有し、高度な共有を使用して編集権限を付与します。
  2. あなたはIDを持つ共有リンクを取得します。リンクを参照してください:-drive.google.com/file/d/[ID]/view?usp=sharing
  3. そのIDをコピーして、次のリンクに貼り付けます:-

googledrive.com/host/[ID]

  1. 上記のリンクはダウンロードリンクになります。
  2. wgetを使用してファイルをダウンロードします。

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

  1. このコマンドは、拡張子がなく、wgetコマンドを実行したのと同じ場所に同じファイルサイズの[ID]という名前のファイルをダウンロードします。
  2. 実際、私は実際には圧縮フォルダをダウンロードしました。だから私はその厄介なファイルの名前を次のように変更しました:-

mv [ID] 1.zip

  1. 次に使用

解凍1.zip

ファイルを取得します。



Googleはドライブからホスティングを削除したため、これは機能しなくなりました。
kgingeri 2017年

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

これを実行すると、警告: `/ C = US / O = Google Trust Services / CN = Google Internet Authority G3 'によって発行されたdocs.google.comの証明書を確認できません:発行者の権限をローカルで確認できません。HTTPリクエストが送信され、応答を待っています... 404 Not Found 2019-02-08 02:56:30 ERROR 404:Not Found。回避策はありますか?
bluejayke

うわー!すばらしい答えであり、非常に論理的です。それを書いてくれてありがとう。このコマンドを使用して1.3 GBのファイルをダウンロードしました... Linuxターミナルからこのコマンドのみで完全自動モード。GCPでも試してみました。そこでもうまく機能します。2020年...これは正しい方法だと思います...彼らが少しのコマンドを変更したとしても、これは試練に耐えるはずです。
Atta Jutt

2

もっと簡単な方法があります。

firefox / chrome拡張機能からcliget / CURLWGETをインストールします。

ブラウザからファイルをダウンロードします。これにより、ファイルのダウンロード中に使用されたCookieとヘッダーを記憶するcurl / wgetリンクが作成されます。任意のシェルからこのコマンドを使用してダウンロードします


これは間違いなく最も簡単で簡単な方法です。
c0degeas

2

グーグルドライブからファイルをダウンさせる簡単な方法あなたはコラボでファイルをダウンロードすることもできます

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/


涼しい。しかし、あなたの1年以上前に投稿されたファイの回答とどう違うのですか?
ウムラウト

1

2018年5月ワーキング

こんにちはこのコメントに基づいて...私は、ファイルからURLのリストをエクスポートするにはbashを作成URLS.txtURLS_DECODED.txt で使用します(私はcygwinを使用してウィンドウとLinuxを組み合わせています)

コマンドスパイダーが導入され、ダウンロードを回避して最終リンクを(直接)取得しました

コマンドGREP HEADおよびCUT、処理して最終リンクを取得します。スペイン語に基づいています。おそらく英語に移植できます。

echo -e "$URL_TO_DOWNLOAD\r" おそらく\ rはcywinのみであり、\ n(ブレークライン)で置き換える必要があります

**********user*********** ユーザーフォルダです

*******Localización*********** はスペイン語であり、アスタリスクをクリアし、単語を英語で配置し、THE 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

PD。ファイルは公開する必要があります。


0

skickaは、Googleドライブからアクセスファイルをアップロード、ダウンロードするCLIツールです。

例-

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.