wget 일괄 다운로드 및 실패한 링크 저장

wget 일괄 다운로드 및 실패한 링크 저장

wget을 사용하여 하나의 텍스트 파일에서 여러 파일을 다운로드하고 실패한 다운로드의 URL을 다른 텍스트 파일에 저장할 수 있습니까?

나는 wget bash 스크립트를 사용하여 다음과 같은 텍스트 파일에서 파일을 다운로드하고 있습니다.

wget -i "/home/user/downloadURLs.txt"

downloadURLs.txt에는 다운로드할 URL의 각 줄이 포함되어 있습니다.

http://[website].com/file1
http://[website].com/file2
http://[website].com/file3
http://[website].com/file4

파일 중 하나가 다운로드에 실패하면 실패한 URL을 별도의 파일에 저장하고 싶습니다. 하지만 wget의 -i옵션을 사용하여 다운로드할 때 모든 다운로드가 성공하면 종료 코드는 0이 되고, 다운로드가 완전히 실패하면 종료 코드는 오류 종료 코드가 될 것이라고 생각합니다. 각 개별 URL에 대한 종료 코드를 얻을 수 없으면 실패한 URL만 저장하도록 할 수 없습니다.

나는 이것이 효과가 있을 것이라고 생각합니다:

#!/bin/bash

#map lines of text file to an array
mapfile -t inputUrls < "/home/user/downloadURLs.txt"

for url in ${inputUrls[@]}
do
    wget "$url"

    if [[ $? != 0 ]]
    "$url" >> "/home/user/failedDownloads.txt"
    fi
done

내가 이것을 원하는지 확실하지 않은 이유는 웹사이트에서 여러 파일을 다운로드할 때 wget이 종종 "[사이트]에 대한 기존 연결을 재사용합니다"라고 말하기 때문입니다. 이 동작은 한 웹사이트에서 다운로드 속도를 높이기 위한 것으로 보이며, 각 URL에 대해 개별적으로 wget을 호출하면 최적화가 손실되는 것 같습니다.

-i입력 파일을 사용하면 wget을 더 효율적으로 다운로드할 수 있다고 생각하는 것이 맞습니까?

내 말이 맞다면 wget의 최적화를 계속 사용하면서 어떻게 텍스트 파일에서 URL을 다운로드하고 실패한 URL을 별도의 파일에 저장할 수 있습니까? 누구든지 여기에 제공할 수 있는 통찰력에 감사드립니다.

답변1

단순히 리디렉션하지 않는 이유는 무엇입니까 stderr?

$ wget -i test.txt 2> wget-fail.log

$ cat  wget-fail.log 
--2016-11-15 22:06:50--  http://failing-host.com/
Auflösen des Hostnamen »failing-host.com (failing-host.com)«... fehlgeschlagen: Der Name oder der Dienst ist nicht bekannt.
wget: kann die Host-Adresse »failing-host.com« nicht auflösen

[편집하다]

stdout 및 stderr을 저장하는 로그를 생성하기 위해 bash 스크립트에 로깅 기능을 설정했습니다. 2>를 사용하면 성공적인 다운로드를 포함하여 비슷한 양의 정보가 포함된 로그 파일을 생성하는 것 같습니다. 로그 파일을 구문 분석하는 관점에서 이 문제를 해결할 수 있습니다.

구문 분석이 필요하지 않습니다.

$ cat wget.sh 
#!/bin/bash
echo log to stdout
echo >&2 log to stderr
wget -i test.txt 2> wget-fail.log

$ sh wget.sh  &> script.log

$ cat script.log 
log to stdout
log to stderr

$ cat wget-fail.log 
--2016-11-15 23:02:00--  http://failing-host.com/
Auflösen des Hostnamen »failing-host.com (failing-host.com)«... fehlgeschlagen: Der Name oder der Dienst ist nicht bekannt.
wget: kann die Host-Adresse »failing-host.com« nicht auflösen

관련 정보