저는 xargs를 사용하여 많은 수의 파일을 병렬로 다운로드하고 있습니다. 내가 겪고 있는 문제는 일부 다운로드가 잠시 후 실패한다는 것입니다. 따라서 목록을 실행하면 모든 다운로드가 성공적으로 완료되지 않아 명령을 다시 실행해야 합니다.
cat links.txt | xargs -n 2 -P 16 wget -c -q -O
성공적으로 다운로드한 파일명을 파일로 출력하는 방법이 있나요? 내가 찾을 수 있는 유일한 해결책은 wget 로그 파일을 구문 분석하는 것입니다.
답변1
대신 GNU 병렬을 사용하십시오 xargs
.
cat links.txt | parallel --joblog my.log -n 2 -P 16 wget -c -q -O
이제 Exitval
의 열을 살펴보세요 my.log
.
종료 값으로 재시도하려는 경우 GNU Parallel에는 작업을 재시도하는 옵션이 있습니다: --retries
, 및 --retry-failed
.
답변2
wget 또는 해당 로그의 출력을 구문 분석하는 것이 유효합니다. 예를 들어,
$ wget -O fixedgear.html https://www.sheldonbrown.com/fixedgear.html 2>&1 | \
awk '/saved/ { print $6 }' | \
sed -e 's/^.//' -e 's/.$//'
README.md
파이프라인의 첫 번째 단계에서는 파일 다운로드를 시도하고, 두 번째 단계에서는 wget을 찾아 파일이 성공적으로 저장되었음을 선언하고 출력하는 경우, 마지막 단계에서는 파일 이름에서 따옴표를 제거합니다.
--tries
wget 및 n의 값을 조정하면 --waitretry
초기 병렬 다운로드가 처음 성공하는 데 도움이 될 수도 있습니다.