是否可以使用 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 能够更有效地下载?
如果我是正确的,如何从文本文件下载 URL 并将失败的 URL 保存到单独的文件中,同时仍然使用 wget 的优化?感谢任何人在这里提供的任何见解。
答案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
[编辑]
我确实在 bash 脚本中设置了一个日志记录功能来创建日志,它可以保存 stdout 和 stderr。仅使用 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