我正在通过wget
下载一些.mp3文件(全部合法):
wget -r -nc files.myserver.com
我必须有时停止下载,此时文件已部分下载。例如,10分钟record.mp3文件成为4分钟record.mp3文件。它播放正确,但不完整。
如果我使用上面的相同命令,因为我的本地计算机中的record.mp3文件已经存在,wget会跳过该文件,尽管它不完整。
我想知道是否有办法检查文件大小,以及远程服务器和本地计算机中的文件大小是否相同重新下载。 (我已经了解了--spider命令给出了文件大小,但是还有其他命令可以自动检查文件大小和是否下载)。
答案 0 :(得分:1)
您可以尝试-c
选项继续下载部分下载的文件,但手册会发出明确的警告:
在结合使用-c时,您需要特别小心 使用-r,因为每个文件都将被视为“不完整 下载“候选人。
虽然没有针对此问题的完美解决方案,但您可以尝试使用-N
选项打开时间戳。这可以防止在服务器上更改文件时出现错误,但仅当服务器支持时间戳和部分下载时才会出现错误。试一试,看看它是怎么回事。
wget -r -N -c files.myserver.com
答案 1 :(得分:0)
如果您需要检查文件是部分下载(大小不同)还是通过时间戳在远程服务器上更新,并且在这种情况下必须在本地更新,则需要使用 -N 选项。
以下是Wget文档中有关 -N (--timestamping
)选项的其他信息:
如果本地文件不存在,或者文件大小不匹配,则无论使用哪种方式,Wget都会下载远程文件。 时间戳记。
添加自:https://www.gnu.org/software/wget/manual/wget.html(第 5个时间戳)
答案 2 :(得分:0)
我会使用wget的-N
选项作为时间戳记,但是请注意,如果您还指定了--no-if-modified-since
选项,则wget仅会比较文件大小。如果没有它,不完整的文件确实会在下次运行时被跳过,因为它们会收到当前时间的时间戳,该时间戳比服务器上的时间戳新。
原因可能是仅使用-N
时,将对设置了If-Modified-Since字段的文件发送GET请求。服务器响应为200或304,但是304不包含文件大小,因此wget无法检查它。
使用--no-if-modified-since
,wget会发送HEAD请求,而不是获取时间戳和文件大小,并同时进行检查。
我用于递归下载文件夹的内容:
wget -T 300 -nv -t 1 -r -nd -np -l 1 -N --no-if-modified-since -P $my_folder $my_url
使用:
-T 300: Set the network timeout to 300 seconds
-nv: Turn off verbose without being completely quiet
-t 1: Set number of tries to 1
-r: Turn on recursive retrieving
-nd: Do not create a hierarchy of directories when retrieving recursively
-np: Do not ever ascend to the parent directory when retrieving recursively
-l 1: Specify recursion maximum depth 1
-N: Turn on time-stamping
--no-if-modified-since: Do not send If-Modified-Since header in ‘-N’ mode, send preliminary HEAD request instead