이전에 소개한 매직 미러(Magic Mirror) 만들기 튜토리얼을 따라 해보셨다면, 파일을 내려받을 때 wget 명령어가 사용된 것을 보셨을 겁니다.
이 글에서는 HTTP, HTTPS, FTP, FTPS 프로토콜을 통해 웹에서 파일을 다운로드할 수 있는 명령줄 도구 wget의 사용법을 예제와 함께 자세히 설명합니다.
리눅스 셸에서 인터넷 파일을 내려받거나 Bash 스크립트 안에서 호출할 수 있습니다. 사용법이 간단하고 활용 범위가 넓으며, 실행 후에는 사용자 개입 없이 백그라운드에서 계속 동작하기 때문에 자동화 작업에도 매우 적합합니다.
기본 문법
wget [OPTIONS]... [ URLS ]...
참고할 점은 다음과 같습니다.
- OPTIONS: 아래 표에 정리된 옵션들을 공백으로 구분하여 지정합니다.
- URLS: 다운로드할 URL 목록으로, 역시 공백으로 구분합니다.
아래는 공식 문서를 바탕으로 정리한 wget의 주요 옵션입니다.
| 주요 옵션 | 설명 |
|---|---|
| -o logfile | 모든 메시지를 logfile에 기록합니다. 원래는 표준 오류(standard error)로 출력되는 메시지들이 로그 파일에 저장됩니다. |
| -a logfile | logfile에 이어서 기록(append)합니다. -o와 동일하지만 기존 로그 파일을 덮어쓰지 않고 내용을 추가합니다. 파일이 없으면 새로 생성됩니다. |
| -q | Wget의 화면 출력을 끕니다. |
| -i file | 로컬 또는 외부 file에서 URL 목록을 읽어옵니다. 이 옵션을 사용하면 명령줄에 URL을 직접 입력할 필요가 없습니다. |
| -t number | 재시도 횟수를 number로 설정합니다. |
| -c | 부분적으로 다운로드된 파일을 이어서 받습니다(이어받기). |
| -T seconds | 네트워크 타임아웃을 seconds초로 설정합니다. |
| -w seconds | 각 다운로드 사이에 지정한 seconds만큼 대기합니다. |
| --user=user | HTTP 또는 FTP 인증에 사용할 사용자 이름을 설정합니다. |
| --password=password | HTTP 또는 FTP 인증에 사용할 비밀번호를 설정합니다. |
| --post-data=string | GET 대신 POST 요청을 보내며 데이터를 전송합니다. string은 "key1=value1&key2=value2" 형식이어야 합니다. |
| -r | 재귀적(recursive) 다운로드를 활성화합니다. |
| -l depth | 재귀 다운로드의 최대 깊이를 depth로 지정합니다. 기본값은 5입니다. |
| -m | 미러링에 적합한 옵션들을 활성화합니다. 재귀 다운로드와 타임스탬프 기능을 켜고, 재귀 깊이를 무제한으로 설정하며, FTP 디렉터리 목록도 유지합니다. |
| -p | 지정한 HTML 페이지를 완전하게 표시하는 데 필요한 모든 파일을 다운로드합니다. 인라인 이미지, 사운드, 참조된 스타일시트 등이 포함됩니다. |
실전 예제
1. HTTPS 서버에서 파일 다운로드하기
파일 하나를 내려받는 가장 기본적인 사용법입니다.
wget https://www.example.com/file.zip
2. 중단된 다운로드 이어받기
다운로드가 도중에 끊긴 경우 -c 옵션으로 이어받기를 할 수 있습니다.
wget -c https://www.example.com/file.zip
3. URL 목록 파일로 다운로드하고 로그 남기기
다운로드할 URL이 담긴 텍스트 파일이 있다면 그 파일을 그대로 wget에 넘겨 일괄 다운로드할 수 있습니다. 결과는 로그 파일로 남겨 나중에 확인할 수 있습니다.
wget -a log.txt -i url-list.txt
-a 대신 -o를 사용해도 되지만, -o는 기존 로그 파일이 있을 경우 덮어쓴다는 점이 다릅니다.
4. 5회 재시도하며 조용히 다운로드하기
실패 시 재시도하면서 진행 상황을 터미널에 출력하지 않으려면 다음과 같이 합니다.
wget -t 5 -q https://www.example.com/file.zip
5. 다운로드 간 6초 대기, 12초 타임아웃 설정
여러 파일을 연속으로 받을 때 서버 부담을 줄이기 위해 다운로드 사이에 대기 시간을 두고, 서버가 12초 안에 응답하지 않으면 중단하도록 설정할 수 있습니다.
wget -w 6 -T 12 -i url-list.txt
6. 사용자 인증이 필요한 FTPS 서버에서 다운로드하기
사용자 이름이 bob, 비밀번호가 boat인 FTPS 서버에서 파일을 내려받는 예제입니다.
wget --user=bob --password=boat ftps://ftp.example.com/file.zip
7. POST 요청으로 파일 다운로드하기
기본값인 GET 대신 HTTP POST 요청을 보내 데이터를 전송할 수 있습니다. 빈 문자열을 보내는 것도 가능합니다.
wget --post-data="postcode=2000&country=Australia" https://www.example.com/file.zip
이 예제에서는 postcode와 country라는 두 개의 POST 데이터를 전송합니다.
POST 요청을 본격적으로 다뤄야 한다면 cURL이 더 유연하고 강력한 선택이 될 수 있습니다.
8. FTP로 디렉터리를 재귀적으로 다운로드하기 (깊이 제한)
재귀 다운로드를 사용하면 폴더의 내용물과 그 안에 있는 하위 폴더의 내용물까지 모두 내려받습니다. 아래 예제에서는 깊이를 3으로 제한했으므로, 3개 이상의 폴더 안에 중첩된 폴더는 다운로드되지 않습니다.
wget -r -l 3 ftps://ftp.example.com/path/to/folder
9. FTP로 디렉터리 전체와 모든 내용 다운로드하기
깊이 제한 없이 폴더 전체를 통째로 내려받으려면 -m(미러링) 옵션을 사용합니다.
wget -m ftps://ftp.example.com/path/to/folder
10. wget으로 웹페이지 전체 클론하기
웹페이지 하나를 이미지, 스타일, 스크립트까지 모두 포함해서 가져오고 싶다면 다음 명령어를 사용합니다.
wget -p https://www.example.com/page.html
결과는 사이트에 따라 천차만별입니다. 일부 최신 웹페이지는 원래 환경에서 떼어내면 제대로 작동하지 않는 경우가 많다는 점을 참고하세요.