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


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

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

但如何让wget跳过下载if pic.png已经有空位?


142
2018-02-09 11:33


起源




答案:


请尝试以下参数:

-nc--no-clobber:跳过要下载的下载内容                                      现有文件。

样品用法:

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

207
2018-02-09 11:40



-nc 不会阻止发送HTTP请求和随后下载文件。如果文件已被完全检索,则在下载文件后它不会执行任何操作。无论如何,如果文件已存在,是否阻止发出HTTP请求? stackoverflow.com/questions/33203898/... - ma11hew28
如链接问题所述,我不同意 - 如果使用no-clobber并且文件名存在则退出。甚至没有HEAD要求。即使不是这种情况,请检查您是否有文件开头:-) [ ! -e "$(basename $URL)" ] && wget $URL - plundra
我想我可能会得到不同的结果,因为我正在使用 --recursive 选项。 - ma11hew28


-nc--no-clobber 选项不是最佳解决方案,因为不会下载较新的文件。一个人应该使用 -N 相反,只有当服务器有更新的版本时才会下载和覆盖文件,所以正确的答案是:

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

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

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


147
2018-05-30 16:00



未正确配置服务器时 -N 可能会失败,wget将永远重新下载。所以有时候 -nc 是更好的解决方案 - user
可能会出现“当服务器配置不正确”时适用的情况? - AjayKumarBasuthkar
从复制的位置下载时,更改所有时间戳。 - Robert
这是否最好取决于背景。例如,我从列表中下载约1600个文件,然后更新列表以包含更多文件。文件没有改变所以我不关心最新版本,我不希望它检查服务器是否有我已经拥有的1600个文件的新版本。 - JBentley
@AjayKumarBasuthkar:当服务器不支持任何检查更新文件的方式时, wget 会抱怨 Last-modified header missing;这正是概述的情况。 - Piskvor


运行Wget时 -r 要么 -p但没有 -N-nd, 要么 -nc,重新下载文件将导致新副本只是覆盖旧文件。

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

在GNU上查看更多信息。


19
2018-02-09 11:42





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

使用 -c 当本地文件大小或等于服务器版本时,标记将避免重新下载。


5
2017-11-08 13:40