Wget을 사용하여 여러 동시 다운로드?


207

wget을 사용하여 웹 사이트 컨텐츠를 다운로드하고 있지만 wget은 파일을 하나씩 다운로드합니다.

4 개의 동시 연결을 사용하여 wget을 다운로드하려면 어떻게해야합니까?


4
좋은 해결책과 비슷한 질문 : stackoverflow.com/questions/7577615/parallel-wget-in-bash
JohnEye

A 본 프로젝트에서 찾아 보게 github.com/rockdaboot/wget2
user9869932

답변:


197

aria2를 사용하십시오.

aria2c -x 16 [url]
#          |
#          |
#          |
#          ----> the number of connections 

http://aria2.sourceforge.net

나는 그것을 좋아한다 !!


26
이것이 어떻게 웹 사이트를 다운로드하는 데 도움이되는지 모르겠습니다. 파일 1 개만 다운로드하는 것처럼 보입니다. 이것이 사실이라면-투표는 -ve가되어야합니다.
Stephen

8
aria2가 wget 또는 lftp와 같은 웹 또는 ftp 미러링을 수행 할 수 없기 때문에 이것은 좋은 대답이 아닙니다. lftp는 여러 연결을 지원할뿐 아니라 미러링을 수행합니다.
Anachronist

9
-s분할 수 -k를 지정하고 분할 세그먼트 당 최소 크기 를 지정하는 것을 잊지 마십시오. 그렇지 않으면 -x최대 연결 수에 도달하지 못할 수 있습니다 .
Bob

2
@Stephen은 여러 개의 소켓을 사용하는 대신 하나의 서버에 여러 개의 소켓을 사용하여 웹 사이트 에서 매우 큰 파일을 훨씬 빠르게 다운로드 하는 것입니다. 이것은 웹 사이트를 긁는 것을 의미하지 않습니다.
gabeio

양말을 지원하지 않습니다 *
Fedcomp

111

Wget은 파일 다운로드 속도를 높이기 위해 다중 소켓 연결을 지원하지 않습니다.

나는 우리가 gmarian 답변보다 조금 더 잘할 수 있다고 생각합니다.

올바른 방법은을 사용하는 것 aria2입니다.

aria2c -x 16 -s 16 [url]
#          |    |
#          |    |
#          |    |
#          ---------> the number of connections here

19
문서에 -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1-s, --split=N Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URLs are used for backup. If less than N URIs are given, those URLs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the --max-connection-per-server option. See also the --min-split-size option. Possible Values: 1-* Default: 5

매개 변수를 자세히 설명해 주셔서 감사합니다. Nick.
thomas.han

4
-s 옵션만으로는 1.10 릴리스 이후로 단일 서버에서 더 이상 파일을 분할하지 않습니다. 여러 연결을 설정하려면 서버 당 --max-connection-per-server를 함께 사용해야합니다. aria2 설명서를 참조하십시오. About the number of connections Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB segment size restriction. So whatever value you specify using -s option, it uses 1 connection per host. To make it behave like 1.9.x, use --max-connection-per-server=4 --min-split-size=1M.
Samuel Li

1
SamuelLi의 업데이트입니다 @의 속기 aria2c -x 4 -k 1M url나를 위해 잘 작동 (연결 당 100,000의 한계와 서버는 나에게 말했다 매개 변수를 사용하여 400K에서 다운로드 할 수 있습니다)
EkriirkE

비판적으로 재귀 HTTP 다운로드를 지원 aria2하지 않으므로 원하는 wget경우 하위 표준 대체품이 됩니다 -r.
user2943160

55

GNU 병렬은 아직 언급되지 않았으므로 다른 방법을 알려 드리겠습니다.

cat url.list | parallel -j 8 wget -O {#}.html {}

5
흥미로운 접근법입니다. 대용량 파일을 다운로드해야 할 때 연결 당 속도가 제한적이지만 여러 파일을 다운로드 할 때 유용 할 수 있습니다.
Nikola Petkanski

이 명령을 실행하면 목록이 8 번 실행됩니다. 나는 같은 방식으로 8 개의 병렬로 각 줄을 처리하는 대신 전체 목록을 8 번 처리합니다.
DomainsFeatured

4
아니오, 그것은 8 개의 직업으로 목록을
나누었

좋아, 나는 분명히 이상한 일을하고있다. 알아낼 것입니다. 빠른 응답 감사합니다.
DomainsFeatured

1
그러나 그것은 쓸모없는 사용입니다cat . 이 제한된 맥락에서, 그것은 무해하지만,이 반 패턴을 적용하고 싶지 않을 수도 있습니다.
tripleee

39

해결책을 찾았습니다.

한 서버에서 다음 서버로 수천 개의 로그 파일을 다운로드하는 과정에서 갑자기 BSD에서 심각한 멀티 스레드 다운로드를 수행해야했습니다 .Wget을 사용하여이를 처리하는 가장 간단한 방법이었습니다. 조금 둘러 보면이 작은 덩어리로 이끌었습니다.

wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url]

wget -r -np -N [url]필요한만큼 스레드를 반복하십시오 ... 이것이 예쁘지 않고 확실히하는 더 좋은 방법이 있지만 빠르고 더러운 것을 원한다면 트릭을 수행해야합니다 ...

참고 : 이 옵션 -Nwget"최신"파일 만 다운로드하므로 서버에서 타임 스탬프가 변경되지 않으면 파일을 덮어 쓰거나 다시 다운로드 할 수 없습니다.


11
그러나 각 프로세스에 대한 전체 아티팩트 세트를 다운로드하지 않습니까?
Kai Mattern

10
@KaiMattern : -nc옵션 추가 : " 클러버 없음"-wget이 다운로드 한 부분 파일을 부분적으로 무시합니다.
SF.

1
나는 다운로드해야 할 이미지 목록을 가지고 있었고 이것은 나에게도 효과적이었다. wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc매우 못생긴, 그러나, 그것은 작동한다. : P
Jared

1
어떤 이유로 든 이러한 연결 중 하나가 끊어지면 다른 연결에 영향을주지 않고 완료되지 않은 파일이 생성됩니다. 이 방법은 무결성 문제를 만듭니다.
muhammedv

-b플래그는 배쉬의 대안으로, 백그라운드에서 wget과 프로세스를 실행합니다 &내장 작업 제어. -o <filename>지정하지 않으면 STDOUT이 wget-log에 기록됩니다 . 스크립팅에 좋습니다. 자세한 내용은 wget (1)을 참조하십시오.
Paul

21

이를 수행 할 수있는 다른 프로그램은 axel입니다.

axel -n <NUMBER_OF_CONNECTIONS> URL

기본 HTTP 인증의 경우

axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"

우분투 매뉴얼 페이지 .


5
이 프로그램은 무제한의 연결을 허용하며 어떤 경우에는 매우 유용합니다.
uglide

1
훌륭한 도구입니다. centos6.xi 사용에 대한 rpm.pbone.net/index.php3/stat/4/idpl/16390122/dir/redhat_el_6/...
satch_boogie

악셀은 HTTP 기본 인증을 수행 할 수 없습니다 :(
rustyx

1
나는 보통한다axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
주님 Loh.

전체 폴더를 재귀 적으로 다운로드하기 위해 axel을 사용할 수 있습니까?
Ryan Arief

17

새로운 (아직 출시되지 않은) 도구는 Mget 입니다. Wget에서 이미 알려진 많은 옵션이 있으며 자신의 응용 프로그램에 다운로드를 쉽게 포함시킬 수있는 라이브러리가 제공됩니다.

질문에 대답하려면 :

mget --num-threads=4 [url]

최신 정보

Mget은 많은 버그 수정 및 더 많은 기능 (예 : HTTP / 2 지원)을 가진 Wget2 로 개발되었습니다 .

--num-threads지금 --max-threads입니다.


좋은 발견. 감사합니다!
user9869932

Mac에 wget2를 설치하는 방법에 대한 팁이 있습니까? 사이트는 소스에서 설치하고 자동 포인트를 얻는 데 문제가있는 문서 만 제공
Chris

TravisCI 스크립트에서 homebrew를 사용하여 gettext (autopoint 포함)를 설치합니다. wget2 저장소에서 .travis_setup.sh를보십시오.
rockdaboot

13

httrack을 사용하는 것이 좋습니다.

전의: httrack -v -w http://example.com/

기본적으로 8 개의 동시 연결로 미러를 수행합니다. Httrack에는 다양한 옵션이 있습니다. 보세요


@ aaa90210 : 프로그램의 결함을 간결하게 설명한다면 좋을 것입니다. ArturBodera의 의견은 훨씬 유익합니다.
Richard

@ArturBodera cookies.txt 파일을 프로그램을 실행중인 폴더에 추가하면 해당 쿠키가 다운로드 헤더에 자동으로 추가됩니다.
Bertoncelj1 1

httrack은 다음 리디렉션을 지원하지 않습니다
Chris Hunt

11

다른 포스터에서 언급했듯이 aria2를 살펴 보십시오 . 버전 1.16.1의 Ubuntu 매뉴얼 페이지에서 :

aria2는 파일을 다운로드하기위한 유틸리티입니다. 지원되는 프로토콜은 HTTP (S), FTP, BitTorrent 및 Metalink입니다. aria2는 여러 소스 / 프로토콜에서 파일을 다운로드하고 최대 다운로드 대역폭을 활용하려고합니다. HTTP (S) / FTP 및 BitTorrent에서 동시에 파일을 다운로드 할 수있는 반면, HTTP (S) / FTP에서 다운로드 한 데이터는 BitTorrent 스웜에 업로드됩니다. Metalink의 청크 체크섬을 사용하여 aria2는 BitTorrent와 같은 파일을 다운로드하는 동안 자동으로 데이터 청크의 유효성을 검사합니다.

-x플래그를 사용하여 서버 당 최대 연결 수를 지정할 수 있습니다 (기본값 : 1).

aria2c -x 16 [url] 

여러 위치에서 동일한 파일을 사용할 수있는 경우 모든 파일에서 다운로드하도록 선택할 수 있습니다. -j모든 정적 URI에 대해 최대 병렬 다운로드 수를 지정 하려면 플래그를 사용하십시오 (기본값 : 5).

aria2c -j 5 [url] [url2]

자세한 내용 은 http://aria2.sourceforge.net/ 을 참조하십시오. 사용법 정보는 매뉴얼 페이지를 설명하는 데 사용되며 하단에 사용법 예제가 포함 된 섹션이 있습니다. 온라인 버전은 http://aria2.sourceforge.net/manual/en/html/README.html 에서 찾을 수 있습니다 .


8

wget은 여러 연결로 다운로드 할 수 없으며 대신 aria2와 같은 다른 프로그램을 사용해보십시오.



4

사용하다

aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &

website.txt에서 한 줄에 1 URL을 넣으십시오 (예 :

https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4

2

그들은 항상 그것이 웹 사이트를 미러링 할 때 그것이 달려 있다고 말하지만 가장 좋은 것은 httrack 입니다. 매우 빠르고 작업하기 쉽습니다. 유일한 단점은 소위 지원 포럼이지만 공식 문서를 사용하여 길을 찾을 수 있습니다 . 그것은 GUI와 CLI 인터페이스를 모두 가지고 있으며 쿠키를 지원합니다. 문서를 읽으십시오. 이것이 최고입니다.

httrack -c8 [url]

서버 과부하를 피하기 위해 기본적으로 최대 동시 연결 수는 8제한됩니다.


2

여러 파일을 동시에 작업 xargs하는 데 사용wget

#!/bin/bash

mywget()
{
    wget "$1"
}

export -f mywget

# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt

Aria2 옵션, 20MB보다 작은 파일로 작업하는 올바른 방법

aria2c -k 2M -x 10 -s 10 [url]

-k 2M 파일을 2MB 청크로 분할

-k또는 --min-split-size기본값이 20mb 인 경우이 옵션과 20mb 미만의 파일을 설정하지 않으면 값이 하나 -x이상인 단일 연결에서만 실행됩니다.-s


1

make쉽게 병렬화 될 수 있습니다 (예 :) make -j 4. 예를 들어, Makefilewget을 사용하여 파일을 병렬로 다운로드하는 데 사용 하는 간단한 내용 은 다음과 같습니다.

BASE=http://www.somewhere.com/path/to
FILES=$(shell awk '{printf "%s.ext\n", $$1}' filelist.txt)
LOG=download.log

all: $(FILES)
    echo $(FILES)

%.ext:
    wget -N -a $(LOG) $(BASE)/$@

.PHONY: all
default: all

0

정규식 또는 FTP 글 로빙 사용을 고려하십시오 . 이를 통해 발생 빈도에 따라 다른 파일 이름 시작 문자 그룹으로 여러 번 wget을 시작할 수 있습니다.

예를 들어 두 NAS간에 폴더를 동기화하는 방법은 다음과 같습니다.

wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.10 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[0-9a-hA-H]*" --directory-prefix=/volume1/foo &
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.11 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[!0-9a-hA-H]*" --directory-prefix=/volume1/foo &

첫 번째 wget은 시작하는 모든 파일 / 폴더를 0, 1, 2... F, G, H동기화하고 두 번째 스레드는 다른 모든 것을 동기화합니다.

이것은 하나의 10G 이더넷 포트 (10.0.0.100)가있는 NAS와 두 개의 1G 이더넷 포트 (10.0.0.10 및 10.0.0.11)가있는 NAS간에 동기화하는 가장 쉬운 방법이었습니다. 두 개의 wget 스레드를 --bind-address다른 이더넷 포트에 바인딩하고 &각 줄의 끝에 두어 병렬로 호출했습니다 . 그로 인해 총 2x 100MB / s = 200MB / s의 대용량 파일을 복사 할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.