wget -o 在失败时写入空文件

aku*_*ser 18 wget

如果我写 wget "no such address" -o "test.html" 它首先创建 test.html 并在失败的情况下将其留空。但是,当不使用 -o 时,它会等待下载是否成功,然后才会写入文件。

我也希望将后一种行为应用于 -o,这可能吗?

Ian*_*non 22

wget 未找到 URL 时返回非零退出状态,因此您可以在失败时附加删除命令:

wget "url" -O file || rm -f file
Run Code Online (Sandbox Code Playgroud)

或者创建一个临时文件,并仅在成功时将其移动到您想要的位置:

wget "url" -O /tmp/wget && mv /tmp/wget file
Run Code Online (Sandbox Code Playgroud)

第二个的好处是不会在失败时删除现有文件,但man tempfile如果您并行运行多个实例,请务必使用唯一的临时名称(请参阅参考资料)。


cwe*_*ske 16

正如评论中所写,wget -O 更像是一个 shell 重定向,它总是写入文件而不考虑错误。

您可以curl -f改用:

curl -f http://nonexistent/file.jpg -o localfile.jpg
Run Code Online (Sandbox Code Playgroud)

如果获取文件时出错,它不会触及本地文件。


Mr *_*unz 4

正确的语法是

wget "url" -O file
Run Code Online (Sandbox Code Playgroud)

注意大写的 O。 -o 选项告诉 wget 写入日志文件,这就是为什么即使失败也总是写入日志文件。