比较文件大小,如果它们与wget不同则下载

时间:2015-06-25 08:14:18

标签: wget

我正在通过wget下载一些.mp3文件(全部合法):

wget -r -nc files.myserver.com

我必须有时停止下载,此时文件已部分下载。例如,10分钟record.mp3文件成为4分钟record.mp3文件。它播放正确,但不完整

如果我使用上面的相同命令,因为我的本地计算机中的record.mp3文件已经存在,wget会跳过该文件,尽管它不完整。

我想知道是否有办法检查文件大小,以及远程服务器和本地计算机中的文件大小是否相同重新下载。 (我已经了解了--spider命令给出了文件大小,但是还有其他命令可以自动检查文件大小和是否下载)。

3 个答案:

答案 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