如果wget中存在文件,请跳过下载?

nai*_*gan 178 parameters wget download command-line-interface

这是运行wget的最简单示例:

wget http://www.example.com/images/misc/pic.png
Run Code Online (Sandbox Code Playgroud)

但如果pic.png已经可用,如何使wget跳过下载?

plu*_*dra 243

请尝试以下参数:

-nc,--no-clobber:跳过将下载到现有文件的下载内容.

样品用法:

wget -nc http://example.com/pic.png
Run Code Online (Sandbox Code Playgroud)

  • `-nc`不会阻止发送HTTP请求和随后下载文件.如果文件已被完全检索,则在下载文件后它不会执行任何操作.无论如何,如果文件已经存在,是否阻止发出HTTP请求?http://stackoverflow.com/questions/33203898/wget-skip-download-if-file-already-exists (31认同)
  • 如链接问题所述,我不同意 - 如果使用no-clobber且文件名存在,则退出.甚至没有HEAD要求.即使不是这种情况,检查你是否有一个文件开头:-)`[!-e"$(basename $ URL)"] && wget $ URL` (7认同)
  • 我想我可能会得到不同的结果,因为我正在使用--recursive选项。 (3认同)
  • 很好的答案!不同意ma11hew28。我刚刚使用 GNU Wget 1.14 和 `wget -nc -i list.txt` 在包含 3,000 个 URL 的列表上进行了测试。别以为服务器能在十分之一秒内爬取3k个链接! (3认同)
  • 此外,如果您希望同步,“-N,--timestamping”表示“除非比本地更新,否则不要重新检索文件”,以防某些远程文件实际上值得重新下载(编辑:我看到另一个现在回答说同样的)。 (2认同)

Dan*_*ski 180

-nc,--no-clobber选择是不是最好的解决方案,新的文件将无法下载.-N只有在服务器有更新的版本时才应该使用它来下载和覆盖文件,所以正确的答案是:

wget -N http://www.example.com/images/misc/pic.png
Run Code Online (Sandbox Code Playgroud)

然后使用-N运行Wget,有或没有-r或者-p,是否下载文件的较新副本的决定取决于文件的本地和远程时间戳和大小. -nc可能不会同时指定-N.

-N,--timestamping:打开时间戳.

  • 如果服务器配置不正确,`-N`可能会失败,wget将始终重新下载.所以有时`-nc`是更好的解决方案. (33认同)
  • 可能会出现"当服务器配置不正确"时适用的情况? (2认同)
  • 当您从复制的位置下载时,更改所有时间戳。 (2认同)
  • @AjayKumarBasuthkar:当服务器不支持任何方式检查较新的文件时,`wget`会抱怨`最后修改的标头丢失`;这正是所概述的情况。 (2认同)

Mah*_*esh 23

使用-r或运行Wget时,或者-p没有-N,-nd或者-nc重新下载文件将导致新副本只是覆盖旧文件.

因此,添加-nc将阻止此行为,而是导致保留原始版本,并忽略服务器上的任何较新副本.

在GNU上查看更多信息.


jst*_*sta 12

我正在寻找的答案是https://unix.stackexchange.com/a/9557/114862.

-c当本地文件的大小大于或等于服务器版本时使用该标志将避免重新下载.

  • `-c` 的意思是“继续”。如果文件更改为具有不同内容的更大文件,您将在本地文件末尾开始下载并添加新文件内容。你最终可能会变成垃圾。 (5认同)
  • 当您使用 -i 标志下载一堆文件时,这尤其有用。`wget -i filelist.txt -c` 将恢复失败的文件列表下载。 (2认同)
  • 我正在从既不提供 Length 标头也不提供 Last-modified 标头(本页其他地方提到)的服务器下载。因此,我想*仅*检查磁盘上是否存在同名文件,如果存在则跳过重新下载。仍在寻找该解决方案。 (2认同)