Slow is better than NOTHING

리눅스/Ubuntu16.04

[Ubuntu] 구글드라이브(Google Drive) 대용량 파일 원격 다운로드

Jeff_Kang 2021. 7. 5. 20:14
반응형

wget 문제점

일반적으로 리눅스 기반 환경에서 wget을 이용하면 파일을 원격으로 다운로드하여 사용할 수 있습니다.

wget $URL

하지만 github등에 올라와있는 구글 드라이브 기반의 업로드 파일들은 url 기반의 wget을 이용해 다운로드할 수 없습니다. 왜냐하면 다음과 같은 형식으로 제공되는 URL 내 다운로드 할 파일이 직접적으로 명시되어있지 않기 때문입니다. 따라서, 로컬 환경에 다운로드 후 FTP, SCP등을 이용하여 다시 서버에 전달해주어야하는 번거로움이 있습니다. 특히 checkpoint같은 대용량 파일들은 URL이 있어도 wget으로 다운로드가 불가능합니다.

구글드라이브 파일 공유링크 예시


Curl을 이용한 구글 드라이브 대용량 파일 다운로드

예시: https://drive.google.com/file/d/1ZtIBU57-VS7vWpszrQpRF_mmBI1iMWUs/view?usp=sharing

이 경우 `curl'을 이용해 대용량 파일을 다운로드해야합니다. 구글 드라이브 대용량 파일을 다운로드 받는 커맨드는 다음과 같습니다.  curl이 설치되어 있지 않은 경우 먼저 curl을 설치해야합니다.

sudo apt-get install curl
VAR="download_id"
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=$VAR" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=$VAR" -o "output_file"
rm cookie

다음과 같은 URL이 주어졌을 때, 빨간색 부분이 file의 download_id입니다. google drive는 파일을 지정된 id값을 기반으로 분류하므로, 빨간색 download id를 복사하여 위 쉘파일의 VAR로 대체해주면됩니다. 3번째 명령어의 '-o' 옵션은 아웃풋 파일의 이름을 지정해주는 것으로, 사용하시는분에 따라 자유롭게 명시해주시면 됩니다.


Curl을 이용한 여러 개의 구글드라이브 대용량 파일 다운로드 쉘스크립트

여러개의 파일을 동시에 다운로드하는 쉘스크립트를 구현하고 싶으신 경우, 아래와 같이 for문의 인자로 download_id를 차례대로 주어 다운로드를 순차적으로 수행할 수 있습니다.

for VAR in 1zAiPdXLPYkikxVnjXR8zcgEGa 1iAwkv1YaVEOi7IGDDHpgY9EB-MUi 1uEQ4XPnm7ZkzLFtTrXb0WfAgi54 1xdocjfDQ88LzLjY9ImzrzUXZB
do
    curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=$VAR" > /dev/null
    curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=$VAR" -o "$VAR.pth"
done
rm cookie

 

 

반응형