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


Answers:


268

尝试以下参数:

-nc--no-clobber:跳过将下载到现有文件的下载。

用法示例:

wget -nc http://example.com/pic.png

34
-nc不会阻止HTTP请求的发送和随后文件的下载。如果已经完全检索了文件,下载文件后它什么都不做。无论如何,如果文件已经存在,是否可以阻止发出HTTP请求?stackoverflow.com/questions/33203898/…–
ma11hew28

8
如链接的问题所述,我不同意-如果使用no-clobber并且文件名存在,则退出。甚至没有HEAD请求。即使这并非如此,检查如果你有一个文件,:-)开始[ ! -e "$(basename $URL)" ] && wget $URL
plundra

3
我想我可能会得到不同的结果,因为我正在使用该--recursive选项。
ma11hew28

197

-nc--no-clobber选择是不是最好的解决方案,新的文件将无法下载。一个人应该改用-N仅当服务器具有较新版本时才下载并覆盖文件,因此正确的答案是:

wget -N http://www.example.com/images/misc/pic.png

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

-N--timestamping:打开时间戳记。


39
如果未正确配置服务器,则-N可能会失败,并且wget将始终重新下载。所以有时候-nc是更好的解决方案。
用户

2
发生“未正确配置服务器时”的适用方案是什么?
AjayKumarBasuthkar 2015年

从复制的位置下载时,更改所有时间戳。
罗伯特

这是否最佳取决于上下文。例如,我要从列表中下载约1600个文件,然后更新列表以包含更多文件。文件不会更改,所以我不在乎最新版本,也不希望它在服务器上检查我已经拥有的1600个文件的新版本。
JBentley '17

2
@AjayKumarBasuthkar:当服务器不支持任何方式检查较新的文件时,wget将会抱怨Last-modified header missing;这正是所概述的情况。
Piskvor在

23

当使用-r-p而不使用-N-nd或来运行Wget时-nc,重新下载文件将导致新的副本仅覆盖旧的副本。

因此,添加-nc将防止此行为,而导致保留原始版本,并忽略服务器上的所有较新副本。

在GNU上查看更多信息。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.