如何确保文件的最新版本完全下载,同时最小化网络传输

如何确保文件的最新版本完全下载,同时最小化网络传输

我正在寻找一个 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上次中断的地方继续。

相关内容