我正在寻找一个 shell 命令,它可以可靠地确保文件完全下载,但避免不必要地重新下载任何内容。这是我希望的伪代码:
If file doesn't exist, download it.
If file exists:
use HTTP HEAD to get timestamp and size of remote file.
if remote timestamp is newer, delete local file and download remote file
if timestamps are the same:
if remote size is greater than local size:
resume download
if remote size is equal to local size:
do nothing
if remote size is less than local size:
do nothing but issue a warning because this is weird
wget
可以使用该-c
选项恢复中断的传输,但我必须跟踪中断的某个地方,这样我才能知道传递该选项,并且它需要再次运行该命令。
wget -N
如果远程文件的时间戳不比本地文件新,则确保避免下载文件。但它不知道传输是否被中断,因此在传输中断时再次调用时不会执行任何操作。
curl -C -
如果不存在文件,则会下载文件;如果只下载了一部分,则会恢复下载。但如果存在已完全下载的文件,则会显示服务器不支持字节范围的错误。
我想我可以自己写一些东西来实现我的伪代码,但这似乎是一个很常见的愿望,所以我想问一下,是否有现成的方法可以做到这一点?
答案1
即使您尚未开始下载文件,也可以使用-c
标志。这应该可以满足您的目的:wget
while ! wget -qc $url; do :; done
这是一个无限循环,直到wget
成功退出。如果文件已部分下载,则循环继续,并从wget
上次中断的地方继续。