wget을 사용하여 여러 파일을 동시에 다운로드하는 방법은 무엇입니까?

wget을 사용하여 여러 파일을 동시에 다운로드하는 방법은 무엇입니까?

저는 다운로드해야 하는 파일의 URL이 포함된 csv 파일에서 약 330,000개의 과학 파일을 다운로드하기 위해 wget을 사용하고 있습니다. 그래서 나는 명령을 사용하고 있습니다

wget -i all_the_urls.csv

내 파일 all_the_urls.csv는 다음과 같습니다

http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11040/spec-11040-58456-0109.fits
http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11068/spec-11068-58488-0780.fits
http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11068/spec-11068-58488-0240.fits
...

파일은 각각 약 250kB로 작습니다. 하지만 너무 많아서 wget하나씩 다운로드하면 다운로드하는 데 며칠이 걸릴 것입니다. wget 명령을 사용하여 동시에 여러 파일을 다운로드할 수 있습니까? 참고 - 내 질문은 동일한 웹사이트에서 많은 파일을 다운로드하는 것과 관련된 다른 질문과 중복되지 않습니다. 또한 저에게 제안하지 마세요 wget2. 설치에 문제가 있어서 wget2다른 솔루션을 찾고 있습니다.

관련이 있을 수 있는데, 내 인터넷 연결 속도는 약 550MB/초이고 파일을 하나씩 다운로드할 때 다운로드 속도는 150kB/초로 표시되는데, 이는 비교해 보면 매우 미미한 수준입니다. 따라서 대역폭 측면에서 보면 한 번에 많은 파일을 다운로드하는 것이 합리적입니다(적어도 내 생각에는).

다음과 같은 잠재적 대안 중 하나를 수행하는 방법도 알려주실 수 있나요?

  • 다운로드하기 전에 파일을 압축하세요. 하나의 큰 zip 파일이 더 빨리 다운로드되기를 바랍니다.
  • 내가 다운로드하는 파일에는 .fits3개의 테이블이 포함되어 있습니다. 실제로 각 테이블의 첫 번째 테이블만 필요합니다. 따라서 첫 번째 테이블만 액세스하고 다운로드할 수 있다면 wget(가급적이면 첫 번째 테이블을 하나의 큰 파일/테이블에 추가하는 것이 좋음) 시간도 절약될 수 있습니다.

제안이나 아이디어가 있으시면 알려주시기 바랍니다.

답변1

당신은 그것을 사용할 수 있습니다 parallel. 대부분의 Linux 배포판에서 사용할 수 있습니다.

-jN이는 N개의 병렬 프로그램이 실행된다는 의미입니다. 비슷하거나 그 이상으로 조정할 수 있습니다 -j8.

cat url-list | parallel -j8 wget {}

또는 대안적으로

cat url-list | parallel -j8 wget ' ' {}

cat다운로드할 URL이 포함된 파일을 읽는 중입니다. 내 파일은 다음과 같습니다.

https://XXX/all/Packages/a/abrt-2.10.9-20.el8.x86_64.rpm
https://XXX/all/Packages/a/abrt-addon-vmcore-2.10.9-20.el8.x86_64.rpm
...

그런 다음 출력은 여러 wget 회전을 담당하는 병렬 처리기로 파이프됩니다(-jN이 개수를 결정함). 이는 {}파이프라인 입력 라인입니다.

관련 정보