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
'리눅스 > Ubuntu16.04' 카테고리의 다른 글
Python을 활용한 구글드라이브 파일 원격 다운로드 (0) | 2023.01.03 |
---|---|
[CUDA ERROR] nvidia-smi has failed because it couldn't communicate with the nvidia driver (0) | 2021.07.10 |