wget:删除不完整的文件

时间:2015-07-03 22:07:35

标签: bash wget

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

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

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

||

这似乎有效,因为wget返回并完成了文件的下载,但问题来自于:ImageMagick,我用它来固定PDF格式的图像,声称图像的标题有错误。

我想要删除不完整文件的内容是:

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

所以问题是,我可以使用什么代替实际存在的wget myurl.com/image{1..3}.png wget -rmincompletefiles wget -N myurl.com/image{1..3}.png convert *.png mypdf.pdf ,或者我应该更好地处理这个问题?

3 个答案:

答案 0 :(得分:1)

好吧,我会尽量使用wget下载文件(您可以指定额外的参数,例如较大的--timeout,以便为服务器提供额外的时间)。 wget假定部分下载的某些事情,即使有适当的简历,它们有时也会被破坏(除非你通过其他方式检查他们的例如MD5总和)。

由于您使用的是convertbash,因此Imagemagick软件包中很可能会提供其他工具,即identify

虽然某些功能肯定记录不清,但它有一个很棒的功能 - 它可以识别损坏的(或部分下载的图像)。

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

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

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

然后我会尝试再次下载已损坏的文件。

答案 1 :(得分:1)

我在尝试实施tvm's suggestion时发现了令人惊讶的发现。

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

如果你遇到同样的问题,那就太酷了!

答案 2 :(得分:0)

我发现this solution适用于我的用例。

从答案:

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

这样,只有在发生错误或取消的情况下,文件才会被删除。