wget을 사용하여 웹 사이트 컨텐츠를 다운로드하고 있지만 wget은 파일을 하나씩 다운로드합니다.
4 개의 동시 연결을 사용하여 wget을 다운로드하려면 어떻게해야합니까?
wget을 사용하여 웹 사이트 컨텐츠를 다운로드하고 있지만 wget은 파일을 하나씩 다운로드합니다.
4 개의 동시 연결을 사용하여 wget을 다운로드하려면 어떻게해야합니까?
답변:
aria2를 사용하십시오.
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
나는 그것을 좋아한다 !!
-s
분할 수 -k
를 지정하고 분할 세그먼트 당 최소 크기 를 지정하는 것을 잊지 마십시오. 그렇지 않으면 -x
최대 연결 수에 도달하지 못할 수 있습니다 .
Wget은 파일 다운로드 속도를 높이기 위해 다중 소켓 연결을 지원하지 않습니다.
나는 우리가 gmarian 답변보다 조금 더 잘할 수 있다고 생각합니다.
올바른 방법은을 사용하는 것 aria2
입니다.
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
-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
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.
aria2c -x 4 -k 1M url
나를 위해 잘 작동 (연결 당 100,000의 한계와 서버는 나에게 말했다 매개 변수를 사용하여 400K에서 다운로드 할 수 있습니다)
aria2
하지 않으므로 원하는 wget
경우 하위 표준 대체품이 됩니다 -r
.
GNU 병렬은 아직 언급되지 않았으므로 다른 방법을 알려 드리겠습니다.
cat url.list | parallel -j 8 wget -O {#}.html {}
cat
. 이 제한된 맥락에서, 그것은 무해하지만,이 반 패턴을 적용하고 싶지 않을 수도 있습니다.
해결책을 찾았습니다.
한 서버에서 다음 서버로 수천 개의 로그 파일을 다운로드하는 과정에서 갑자기 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]
필요한만큼 스레드를 반복하십시오 ... 이것이 예쁘지 않고 확실히하는 더 좋은 방법이 있지만 빠르고 더러운 것을 원한다면 트릭을 수행해야합니다 ...
참고 : 이 옵션 -N
은 wget
"최신"파일 만 다운로드하므로 서버에서 타임 스탬프가 변경되지 않으면 파일을 덮어 쓰거나 다시 다운로드 할 수 없습니다.
-nc
옵션 추가 : " 클러버 없음"-wget이 다운로드 한 부분 파일을 부분적으로 무시합니다.
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
매우 못생긴, 그러나, 그것은 작동한다. : P
-b
플래그는 배쉬의 대안으로, 백그라운드에서 wget과 프로세스를 실행합니다 &
내장 작업 제어. -o <filename>
지정하지 않으면 STDOUT이 wget-log에 기록됩니다 . 스크립팅에 좋습니다. 자세한 내용은 wget (1)을 참조하십시오.
이를 수행 할 수있는 다른 프로그램은 axel
입니다.
axel -n <NUMBER_OF_CONNECTIONS> URL
기본 HTTP 인증의 경우
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
새로운 (아직 출시되지 않은) 도구는 Mget 입니다. Wget에서 이미 알려진 많은 옵션이 있으며 자신의 응용 프로그램에 다운로드를 쉽게 포함시킬 수있는 라이브러리가 제공됩니다.
질문에 대답하려면 :
mget --num-threads=4 [url]
최신 정보
Mget은 많은 버그 수정 및 더 많은 기능 (예 : HTTP / 2 지원)을 가진 Wget2 로 개발되었습니다 .
--num-threads
지금 --max-threads
입니다.
httrack을 사용하는 것이 좋습니다.
전의: httrack -v -w http://example.com/
기본적으로 8 개의 동시 연결로 미러를 수행합니다. Httrack에는 다양한 옵션이 있습니다. 보세요
다른 포스터에서 언급했듯이 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 에서 찾을 수 있습니다 .
wget은 여러 연결로 다운로드 할 수 없으며 대신 aria2와 같은 다른 프로그램을 사용해보십시오.
그들은 항상 그것이 웹 사이트를 미러링 할 때 그것이 달려 있다고 말하지만 가장 좋은 것은 httrack 입니다. 매우 빠르고 작업하기 쉽습니다. 유일한 단점은 소위 지원 포럼이지만 공식 문서를 사용하여 길을 찾을 수 있습니다 . 그것은 GUI와 CLI 인터페이스를 모두 가지고 있으며 쿠키를 지원합니다. 문서를 읽으십시오. 이것이 최고입니다.
httrack -c8 [url]
서버 과부하를 피하기 위해 기본적으로 최대 동시 연결 수는 8 로 제한됩니다.
여러 파일을 동시에 작업 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
make
쉽게 병렬화 될 수 있습니다 (예 :) make -j 4
. 예를 들어, Makefile
wget을 사용하여 파일을 병렬로 다운로드하는 데 사용 하는 간단한 내용 은 다음과 같습니다.
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
정규식 또는 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의 대용량 파일을 복사 할 수있었습니다.