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

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

但是如何使wget跳过下载if pic。已经有Pngis了?


当前回答

我想要的答案在https://unix.stackexchange.com/a/9557/114862。

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

其他回答

试试下面的参数:

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

示例用法:

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

当使用-r或-p运行Wget,但不带-N、-nd或-nc时,重新下载文件将导致新副本简单地覆盖旧副本。

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

在GNU上查看更多信息。

我使用-N时遇到了问题,因为我想将输出保存到不同的文件名。

时间戳,wget文档:

满足以下两个条件之一的文件被认为是新文件: 该名称的文件在本地不存在。 该名称的文件确实存在,但远程文件的修改时间比本地文件晚。

使用测试:

test -f stackoverflow.html || wget -O stackoverflow.html https://stackoverflow.com/

如果文件存在,test将计算为FALSE,因此wget将被执行。

我想要的答案在https://unix.stackexchange.com/a/9557/114862。

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

-nc,——no-clobber选项不是最好的解决方案,因为新文件将不会被下载。应该使用-N来代替,它只会在服务器有更新的版本时下载并覆盖文件,所以正确的答案是:

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

然后使用-N运行Wget,使用或不使用-r或-p,决定是否下载文件的新副本取决于本地和远程时间戳以及文件的大小。-nc不能与-N同时指定。 -N,——timestamping:打开时间戳。