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 能够更有效地下载?

如果我是正确的,如何从文本文件下载 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

相关内容