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 总和)。
由于您使用的是 convert
和 bash
,因此 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
这样,只有在发生错误或取消时才会删除文件。
我目前正在使用 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 总和)。
由于您使用的是 convert
和 bash
,因此 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
这样,只有在发生错误或取消时才会删除文件。