[curl] 구글 드라이브에서 wget / curl 큰 파일

스크립트로 Google 드라이브에서 파일을 다운로드하려고하는데 약간의 문제가 있습니다. 다운로드하려는 파일이 여기 있습니다 .

나는 온라인에서 광범위하게 보았고 마침내 그들 중 하나를 다운로드받을 수있었습니다. 파일의 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에 확인을 추가하는 방법이 있음을 나타냅니다. 내가 방문한 링크 중 하나가 제안 &confirm=no_antivirus했지만 작동하지 않습니다.

여기 누군가가 이것을 도울 수 있기를 바랍니다!



답변

경고 :이 기능은 더 이상 사용되지 않습니다. 주석에서 아래 경고를 참조하십시오.


이 질문을 살펴보십시오. Google Drive API를 사용하여 Google Drive에서 직접 다운로드

기본적으로 공용 디렉토리를 작성하고 다음과 같은 상대 참조로 파일에 액세스해야합니다.

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

또는이 스크립트를 사용할 수 있습니다 : https://github.com/circulosmeos/gdown.pl


답변

2020 년 6 월

file_id0Bz8a_Dbh9QhbNU3SGlFaDg처럼 보일 것이다

파일을 마우스 오른쪽 버튼으로 클릭 한 다음 공유 가능 링크 가져 오기를 통해 파일을 얻을 수 있습니다.
열린 액세스 파일에 대해서만 작업하십시오 (링크가있는 사람은 누구나 볼 수 있음). 디렉토리에서는 작동하지 않습니다. Google Colab에서 테스트되었습니다. 파일 다운로드시 가장 잘 작동합니다. tar / zip을 사용하여 단일 파일로 만드십시오.

예 : 이 디렉토리 에서 readme 파일을 다운로드하려면

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


답변

공유 가능한 링크가 주어지면 Google 드라이브에서 파일을 다운로드하는 Python 스 니펫을 작성했습니다 . 2017 년 8 월 기준으로 작동합니다 .

스니핑은 gdrive 또는 Google Drive API를 사용하지 않습니다 . 요청 모듈을 사용합니다 .

Google 드라이브에서 대용량 파일을 다운로드 할 때 단일 GET 요청으로는 충분하지 않습니다. 두 번째 매개 변수가 필요하며 confirm 이라는 추가 URL 매개 변수가 있으며 그 값은 특정 쿠키의 값과 같아야합니다.

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)


답변

오픈 소스 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에 대한 액세스 권한을 얻어야합니다. 이를 위해 브라우저에서 방문 해야하는 링크가 표시되고 도구에 복사하여 붙여 넣을 수있는 확인 코드가 표시됩니다. 그런 다음 다운로드가 자동으로 시작됩니다. 진행률 표시기는 없지만 파일 관리자 나 두 번째 터미널에서 진행률을 관찰 할 수 있습니다.

출처 : Tobi의 다른 답변에 대한 의견 .

 

추가 트릭 : 속도 제한. gdrive제한된 최대 속도로 다운로드하려면 (네트워크 pv휩쓸 지 않기 위해 …) 다음과 같은 명령을 사용할 수 있습니다 ( PipeViewer ).

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

다운로드 한 데이터 양 ( -b)과 다운로드 속도 ( ) 가 표시 -r되고이 속도는 90 kiB / s ( -L 90k)로 제한됩니다.


답변

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로 쿠키 파일 및 HTML 코드를 가져옵니다.
grep과 sed로 html을 파이프하고 파일 이름을 검색하십시오.
쿠키 파일에서 awk로 코드를 확인하십시오.
마지막으로 쿠키가 활성화 된 파일을 다운로드하고 코드와 파일 이름을 확인하십시오.

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


답변

2018 년 3 월 기준으로 업데이트하십시오.

다른 답변으로 제공된 다양한 기술을 사용하여 파일 (6GB)을 Google 드라이브에서 AWS ec2 인스턴스로 직접 다운로드했지만 그중 아무것도 작동하지 않습니다 (오래되었을 수 있습니다).

그래서 다른 사람들의 정보를 위해, 내가 성공적으로 한 방법은 다음과 같습니다.

  1. 다운로드하려는 파일을 마우스 오른쪽 버튼으로 클릭하고 공유를 클릭 한 후 링크 공유 섹션에서 “이 링크가있는 모든 사용자가 편집 할 수 있음”을 선택하십시오.
  2. 링크를 복사하십시오. 이 형식이어야합니다.https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. 링크에서 FILEIDENTIFIER 부분을 복사하십시오.
  4. 아래 스크립트를 파일로 복사하십시오. curl을 사용하고 쿠키를 처리하여 파일 다운로드를 자동화합니다.

    #!/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 ‘를 사용하여 스크립트를 실행하십시오.

추신 : 위의 스크립트에 대한 Github 요점은 다음과 같습니다. https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424


답변

이 작업을 수행하는 빠른 방법이 있습니다.

링크가 공유되어 있는지 확인하십시오.

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