cURL 로 파일 다운로드 받기

발생일: 2013.03.05

문제:
맥으로 넘어와서 가장 많이 사용하는 커맨드 중의 하나가 curl 이다.

커맨드라인에 익숙치 않았던 때엔,
  '오른쪽 버튼 > 다른 이름으로 저장 > 다운로드 폴더에 가서 복사 > 원하는 폴더에 붙여넣기'
가 얼마나 귀찮은 일인지 몰랐더랬다.

얼마 전엔 비슷한 패턴의 주소를 가진 파일들을 한꺼번에 다운로드 받을 일이 있었는데,
curl 을 이용해서 노가다 없이 가뿐하게 받을 수 있었다.

그치만 사실,..
스크립트를 짜느라 하나 하나 클릭해서 다운로드 받는 것보단 오랜 시간이 걸리긴 했다. -_-a

ㅎㅎㅎ 여튼, 이번에 스크립트를 짜보면서 curl 에 좀 더 익숙해졌다.
유용한 몇 가지 기능을 메모해둔다.


해결책:

먼저, curl 은 커맨드 라인에서 URL 형태의 리소스를 요청/응답할 수 있는 도구다.

전체 매뉴얼은 커맨드 라인에서 `man curl` 을 호출해 볼 수 있고,
curl 사이트의 문서 페이지(http://curl.haxx.se/docs/manpage.html)에서도 확인할 수 있다.


아래는 몇 가지 옵션을 사용한 유용한 예제이다.

1. 응답을 파일에 쓰기

  $ curl http://example.com/resource > foo.txt

옵션 없이 호출하는 curl 커맨드는 표준 출력으로 응답을 출력하는데,
위와 같이 출력을 리다이렉트해서 파일에 쓸 수 있다.


2. 파일명으로 저장하기

  $ curl -o foo.txt http://example.com/foo.txt

-o 옵션으로 리소스의 파일명을 지정해 다운로드할 수 있다.

  $ curl -O http://example.com/foo.txt

-O 옵션을 사용하는 경우, 리소스의 파일명을 그대로 사용한다.


3. 여러 파일 다운로드 받기

  $ curl -O http://example.com/foo[0-9].txt

위 코드는, foo0.txt 부터 foo9.txt 파일을 다운로드 받는다.

  $ curl -O http://example.com/foo-[a-z][0-9].txt

[]는 여러 번 조합할 수 있고, 위 코드는 foo-a0.txt 부터 foo-z9.txt 까지의 파일을 다운로드 받는다.

  $ curl -O http://example.com/{foo,bar,baz}.txt

중괄호({})를 써서 위와 같이 호출할 수도 있고, foo.txt, bar.txt, baz.txt 를 다운로드 받는다.


4. for 문으로 여러 파일 다운로드 받기

  $ files="foo bar baz"
  $ for name in files; do
       curl -O "http://example.com/${name}.txt"
     done

싱글 라인으로 호출하는 경우, 가끔 제대로 다운로드 받아지지 않는 경우가 있는 것 같다.
왜인지 정확히 살펴보진 않았지만, 위와 같이 for 구문으로 호출하는 방법으로 우회할 수 있다.



덧)
리눅스 기반에서는 curl 대신, wget 이 설치되어 있고, 사용 방법은 대체로 비슷하다.


cURL의 옵션에 대한 상세한 설명은 아래 포스트를 참고하면 된다.


참고:
- Single line command line to download multiple files: http://lists.apple.com/archives/macos-x-server/2004/Nov/msg01211.html
- 15 Practical Linux cURL Command Examples: http://www.thegeekstuff.com/2012/04/curl-examples/


카테고리

분류 전체보기 (682)
About me. (6)
Daylogs (647)
비공개 (0)
영어공부 (0)
My works - 추억 (29)