我目前正在使用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
,或者我应该更好地处理这个问题?
答案 0 :(得分:1)
好吧,我会尽量使用wget
下载文件(您可以指定额外的参数,例如较大的--timeout
,以便为服务器提供额外的时间)。 wget
假定部分下载的某些事情,即使有适当的简历,它们有时也会被破坏(除非你通过其他方式检查他们的例如MD5总和)。
由于您使用的是convert
和bash
,因此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
这样,只有在发生错误或取消的情况下,文件才会被删除。