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