안녕하세요, 진짜 간만에 글 작성하네요.
최근 드롭박스에서 대량(10.0GB+, 파일수 약 28만개)의 파일을 공유받은 일이 있었습니다.
드롭박스 공유 링크에는, 이를테면 "https://www.dropbox.com/sh/foo/bar?dl=0"처럼 URL이 생성되는데 dl=1로 주면 그 파일 혹은 폴더를 바로 다운로드 받는 기능이 있긴 합니다. 그런데 저처럼 수많은 하위 디렉토리가 있고 파일의 용량 또한 큰 경우에는 제대로 동작하지 않는 문제가 있습니다. 이만한 용량을 내 드롭박스로도 가져오려고 해도 용량이 많이 필요하고, 또 이미 공개 폴더인데 이것을 위해 추가 비용을 지불하는 것도 낭비인 것 같았습니다.
드랍박스는 여러 cli 도구들이 있어서 그 쪽도 알아봤지만, 저처럼 공개 공유 폴더에 대한 작업을 해 주는 것은 살펴보지 못했습니다. 또 남의 공개 공유 폴더에 대해서는 자신의 드롭박스 폴더에 만큼 자유롭게 작업이 되지는 않고 일부 기능이 제한되더군요. 그래서, 직접 만들었어요.
준비물은 이렇습니다.
1. python 2.7+
2. aria2c (https://aria2.github.io/): 다운로드를 위한 유틸리티입니다. 제가 드리는 스크립트는 이 전문 유틸리티가 다운로드 받을 수 있도록 파라미터를 잘 생성하는 일입니다!
스크립트는 GIST에 올려 두었습니다. https://gist.github.com/chwnam/a97c5b6c70d274a5ecdaf97761aed6b1
댓글에 간단하게 사용법을 적어 두었는데, 이 쪽에도 같이 올려 두겠습니다.
세팅은 이렇습니다.
- Python 2.7.14로 작성하였습니다.
- pip install dropbox 로 드롭박스 패키지를 설치합니다.
- 드롭박스 개발자 페이지로 가서 oauth2 access token을 발급받습니다.
- 발급받은 토큰을 'dropbox_access_token'이란 환경 변수로 지정해 둡니다.
간단한 사용법입니다.
-
목록 생성하기
python dropbox_attachments.py --command=tree --output='url_list.csv' --link='https://dropbox.com/.....'
해당 공유 폴더를 재귀적으로 돌면서 모든 파일의 목록을 조사해 url_list.csv 파일로 추출합니다. -
증분 목록 생성하기
python dropbox_attachments.py --commend=tree --input='url_list.csv' --output='updated.csv' --link='https://dropbox.com/.....'
해당 공유 폴더를 재귀적으로 도는 것까지는 같으나, input으로 준 파일과 대조하여, input에 없는 내용, 혹은 리비전이 변경된 (즉 더 새로운 파일) 파일만을 추출해 updated.csv 로 추출합니다. -
기본/증분 목록 합치기
python dropbox_attachments.py --commend=merge --input='url_list.csv' --incremental 'updated.csv' --output='new_url_list.csv' --link='https://dropbox.com/.....'
기존의 url_list.csv 파일과 update.csv 파일을 합쳐 updated의 최신 내용을 url_list와 합칩니다. 결과는 new_url_list.csv로 저장합니다. -
aria2c 다운로드 유틸리티를 위한 input file 생성하기
다운로드는 전문 다운로드 유틸리티에게 맡기는 것이 더욱 효율적입니다. aria2가 목록을 직접 다운로드 할 수 있도록 csv 파일을 가공하여 input-file 파라미터로 사용할 파일을 생성하도록 도와줍니다.python dropbox_attachments.py --command=aria2 --input 'url_list.csv' --output='aria2.txt' --link='https://dropbox.com/.....'
이렇게 만들어진 aria2.txt는 다음처럼 사용 가능합니다.
aria2c --input-file=aria2.txt --dir='./downloads'
p.s.) 기존 스크립트에서 내용을 뚝 잘라내어 단품으로 편집한 것입니다. 충분히 테스트한 것은 아니라 군데군데 오류가 있을 수 있습니다. 급한 작업을 효율적으로 처리하려는 꼼수에서 만든 스크립트이가 목적인 만큼 아주 높은 완성도를 가진 건 아니에요. 아무튼 필요하신 분들이 계시다면 작은 도움이 되기를 바랍니다.
wget을 쓰면 여러 파일을 동시에 N개 받는다는 작업을 하기 힘들지만 aria2c는 간단하죠~