저는 다운로드해야 하는 파일의 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 파일이 더 빨리 다운로드되기를 바랍니다.
- 내가 다운로드하는 파일에는
.fits
3개의 테이블이 포함되어 있습니다. 실제로 각 테이블의 첫 번째 테이블만 필요합니다. 따라서 첫 번째 테이블만 액세스하고 다운로드할 수 있다면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이 개수를 결정함). 이는 {}
파이프라인 입력 라인입니다.