我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 文件。