我想在脚本中下载很多 URL,但我不想保存导致 HTTP 错误的 URL。

据我从手册页可以看出,两者都不是 curl 或者 wget 提供这样的功能。有人知道另一个下载器吗?

有帮助吗?

解决方案

我刚刚为此目的设置了一个衬垫:

(仅适用于单个文件,可能对其他人有用)

A=$$; ( wget -q "http://foo.com/pipo.txt" -O $A.d && mv $A.d pipo.txt ) || (rm $A.d; echo "Removing temp file")

这将尝试从远程主机下载文件。如果出现错误,则不会保留该文件。在所有其他情况下,它都会被保留并重命名。

其他提示

我觉得 -f 选项 curl 做你想做的事:

-f, --fail

(HTTP) 服务器出现错误时静默失败(根本没有输出)。这主要是为了更好地启用脚本等,以更好地处理失败的尝试。在正常情况下,当HTTP服务器无法交付文档时,它返回了So So的HTML文档(通常还描述了原因以及更多内容)。该标志将阻止卷曲输出并返回错误22。[...]

但是,如果响应实际上是 301 或 302 重定向,则仍然会保存,即使其目的地会导致错误:

$ curl -fO http://google.com/aoeu
$ cat aoeu
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/aoeu">here</A>.
</BODY></HTML>

要跟随重定向到其死胡同,还要给出 -L 选项:

-L, --location

(http/https)如果服务器报告了请求的页面已移至其他位置(以一个位置表示:标题和3xx响应代码),此选项将使卷曲重做新位置上的请求。[...]

古丝..来到这里寻找解决方案......最终编写了一些 shell 代码来完成它。

if [ `curl -s -w "%{http_code}" --compress -o /tmp/something \
      http://example.com/my/url/` = "200" ]; then 
  echo "yay"; cp /tmp/something /path/to/destination/filename
fi

这会将输出下载到 tmp 文件,并仅在状态为 200 时创建/覆盖输出文件。我的用例略有不同..就我而言,输出需要 > 10 秒才能生成......我不希望目标文件在此期间保持空白。

我有一个解决方法建议,它会下载文件,但如果文件大小为 0,它也会将其删除(如果发生 404,就会发生这种情况)。

wget -O <filename> <url/to/file>
if [[ (du <filename> | cut -f 1) == 0 ]]; then
    rm <filename>;
fi;

它适用于 zsh,但您可以将其改编为其他 shell。

但如果您提供了,它只会将其保存在第一位 -O 选项

笔记: 我知道这是一个较旧的问题,但我相信我已经为那些使用的人找到了更好的解决方案 wget 比上述任何答案提供的都要多。

wget -q $URL 2>/dev/null

当且仅当 HTTP 状态代码在 200 范围内时(Ok),才会将目标文件保存到本地目录。

此外,如果您想做一些事情,例如在请求遇到错误时打印出错误,您可以检查 wget 退出代码 对于非零值,如下所示:

wget -q $URL 2>/dev/null
if [ $? != 0]; then
    echo "There was an error!"
fi

我希望这对那些面临与我相同问题的人有所帮助。

更新:我只是将其放入我自己的项目的更易于脚本化的形式中,并认为我会分享:

function dl {
    pushd . > /dev/null
    cd $(dirname $1)
    wget -q $BASE_URL/$1 2> /dev/null
    if [ $? != 0 ]; then
        echo ">> ERROR could not download file \"$1\"" 1>&2
        exit 1
    fi
    popd > /dev/null
}

您可以下载文件而不保存使用 "-O -" 选项为

wget -O - http://jagor.srce.hr/

您可以在以下位置获取更多信息 http://www.gnu.org/software/wget/manual/wget.html#Advanced-Usage

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top