wget:删除不完整的文件

wget: delete incomplete files

我目前正在使用 bash 脚本通过 wget 下载多个图像。

不幸的是,我下载的服务器不太可靠,因此有时当我下载文件时,服务器会断开连接,脚本会移动到下一个文件,而前一个文件不完整。

为了解决这个问题,我尝试在脚本使用以下方法获取所有不完整的文件后添加第二行:

wget -c myurl.com/image{1..3}.png

这似乎在 wget 返回并完成文件下载时起作用,但问题来自于此:ImageMagick,我用它来拼接 pdf 中的图像,声称 headers 的图像。

我对删除不完整文件的想法是:

wget myurl.com/image{1..3}.png
wget -rmincompletefiles
wget -N myurl.com/image{1..3}.png
convert *.png mypdf.pdf

所以问题是,我可以用什么来代替实际存在的 -rmincompletefiles,或者我应该有更好的方法来解决这个问题?

好吧,我会尝试用 wget 下载文件(你可以指定额外的参数,比如更大的 --timeout 来给服务器一些额外的时间)。 wget 假设有关部分下载的某些事情,即使有适当的恢复,它们有时也会被破坏(除非您通过其他方式检查它们的 MD5 总和)。

由于您使用的是 convertbash,因此 Imagemagick 包中很可能还有另一个可用的工具 - 即 identify.

虽然某些功能的文档肯定很少,但它有一项很棒的功能 - 它可以识别损坏的(或部分下载的图像)。

➜  ~  identify b.jpg; echo $?
identify.im6: Invalid JPEG file structure: ...
1

如果您在不一致的图像上调用它,它将 return 退出状态 1。您可以使用简单的循环删除这些不一致的图像,例如:

for i in *.png;
   do identify "$i" || rm -f "$i";
done

然后我会尝试重新下载损坏的文件。

我在尝试实现 时有了惊人的发现。

事实证明,这是我没有意识到的,当您 运行 wget -N 时,wget 实际上会检查文件大小并验证它们是否相同。如果不是,则删除文件,然后重新下载。

如果您遇到与我相同的问题,那么很酷的提示!

我发现 适用于我的用例。

来自回答:

wget http://www.example.com/mysql.zip -O mysql.zip || rm -f mysql.zip

这样,只有在发生错误或取消时才会删除文件。