우리나라는 일반적으로 인터넷 속도가 상당히 빠른 편이다. 국가 차원에서 쓸 데 없이 막는 곳이 많아서 문제긴 하지만 어쨌든 속도 자체는 빠르다.

하지만 인터넷에서 필요한 파일들을 다운받다보면 파일이 호스팅된 서버의 속도가 느려서 다운로드 속도가 복장터지게 하는 경우가 왕왕 있다. 또는 트래픽이 몰린다든가.

그럴 때 유용하게 썼던 앱이 바로 downloadshuttle 이다. 다운로드 링크만 따면 파일을 분할해서 받을 수 있도록 해주는 앱이다.

이 앱이 한가지 아쉬웠던 점이 맥에서만 돌아간다는 점이었다. 우분투나 윈도우에서도 사용할 수 있는 방법이 있었으면 했다. split download 키워드로 검색을 했더니 curl 명령어에서 --range 옵션으로 다운로드 데이터를 바이트 단위로 나눠 받을 수 있다는 것을 알게 되었다. 내친 김에 bash 스크립트로 작성해보자는 생각이 들었다. 나중에 알게 된 사실인데 이미 2013년에 거의 완전히 같은 코드를 작성한 리포가 있었다는 게 함정이라면 함정이다.

일단 작성한 코드는 Github 리포 에 올려두었다. 3.2.56(1) 버전 bash 에서 동작하는 걸 확인했고 맥의 경우 gawk 를 별도로 설치해주어야 한다.1 macOS 의 경우 curl 이 기본적으로 탑재되어 있으며 리눅스의 경우도 대부분 curl이 기본 탑재되어 있다.2

스크립트 를 내려받고 아래처럼 사용할 수 있다.

bash split_download.sh '다운로드링크'

쪼개는 수를 달리하고 싶은 경우에는 '다운로드링크' 뒤에 쪼개고자 하는 갯수를 입력하면 된다.

bash split_download.sh 'https://raw.githubusercontent.com/Canorus/split_download/main/split_download.sh' 8

같은 경우 8개로 나눠 받은 뒤 합치게 된다. 기본값은 5개로 나눠받는다.

위에서 언급한 2013년 코드 와 다른 점은 쪼개는 갯수를 인자로 줄 수 있다는 점이다. 나머지는 스크립트가 알아서 나눠서 내려받고 병합한다.

이래저래 bash 가지고 짱구를 굴릴 수 있어서 재밌었다. 그리고 생각보다 결과물이 빨리 튀어나와서 다행이라고 생각한다. 솔직히 여기서 이틀만 더 늘어졌어도 포기할 뻔 했다.


참조 페이지

  1. homebrew 를 사용하여 설치하면 편하다 

  2. curl -v 를 입력하여 확인할 수 있다.