即使重新启动,我可以信任 wget 的退出状态吗?

即使重新启动,我可以信任 wget 的退出状态吗?

wget使用以下命令启动了一项作业:

urls=(https://example.com/file1 https://example.com/file2
      https://example.com/file3 https://example.com/file4)
for url in ${urls[@]}; do 
  wget "$url" 2>/dev/null && echo "$url done" >> progress & 
done

这些文件每个大约 30-40G,所以我让它运行过夜。今天我又检查了一下,发现了以下内容:

-rw-rw-r-- 1 a staff  13M Mar 18 15:11 file1
-rw-rw-r-- 1 a staff  18M Mar 18 15:12 file1.1
-rw-rw-r-- 1 a staff  38G Mar 18 21:10 file1.2
-rw-rw-r-- 1 a staff  12M Mar 18 15:12 file2
-rw-rw-r-- 1 a staff  44G Mar 18 21:35 file2.1
-rw-rw-r-- 1 a staff  446 Mar 18 21:35 progress
-rw-rw-r-- 1 a staff  40G Mar 18 21:24 file3.1
-rw-rw-r-- 1 a staff 4.4M Mar 18 15:12 file3
-rw-rw-r-- 1 a staff 6.5M Mar 18 15:12 file4
-rw-rw-r-- 1 a staff  42G Mar 18 21:27 file4.1

换句话说,我看到一些filename.N文件,看起来大小可能合适,但filename文件本身显然太小了。该progress文件报告所有文件均已成功下载:

https://example.com/file1 done 
https://example.com/file2 done 
https://example.com/file3 done 
https://example.com/file4 done 

我已要求向我提供这些文件的人向我提供每个文件的 md5sum,以便我可以查看是否有任何文件filename.N实际上是完整副本。同时,我可以放心地假设filename.N的 最大值N实际上是相关文件的完整副本吗?

我猜测该wget过程已重新启动几次,这就是我拥有这些.N文件的原因,但鉴于该&& echo文件似乎有效,这是否意味着这些文件最终确实正确下载,或者即使&&是不完整的文件也可能已执行下载?

答案1

您可以查看服务器发送的标头 ( --server-response),如果它们包含Content-Length则 wget 仅在收到那么多字节时才会退出。 arg的手册页中提到了这一点--ignore-length。但 md5 或其他和总是一个好主意!

答案2

我的解读https://www.gnu.org/software/wget/manual/wget.html

'--no-clobber' 如果在同一目录中多次下载文件,Wget 的行为取决于几个选项,包括 '-nc'。在某些情况下,重复下载时本地文件将被破坏或覆盖。在其他情况下,它将被保留。

当运行不带“-N”、“-nc”、“-r”或“-p”的 Wget 时,在同一目录中下载同一文件将导致保留文件的原始副本,而第二个副本将被命名为“文件.1'。如果再次下载该文件,第三个副本将被命名为“file.2”,依此类推。

... wget 将最新版本放入 .N 文件中,因此可以信任。唯一需要排除的其他问题是覆盖 WGETRC 或其他全局 wgetrc 文件。

相关内容