如果 wget 中已经存在文件,则跳过下载?

Posted

技术标签:

【中文标题】如果 wget 中已经存在文件,则跳过下载?【英文标题】:Skip download if files already exist in wget? 【发布时间】:2011-06-24 01:51:52 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

Timestamping, wget docs:

如果满足以下两个条件之一,则文件被视为新文件:

    本地不存在同名文件。 确实存在同名文件,但远程文件的修改时间比本地文件晚。

使用test

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

如果文件存在不存在,test 将评估为 FALSE,因此将执行 wget

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

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

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

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

【讨论】:

当您下载一堆带有 -i 标志的文件时,这尤其有用。 wget -i filelist.txt -c 将恢复失败的文件列表下载。 我正在从既不提供 Length 标头也不提供 Last-modified 标头(在本页其他地方提到)的服务器上下载。因此,如果磁盘上存在同名文件,我想检查 only ,如果存在则跳过重新下载。仍在寻找该解决方案。 -c 表示continue。如果文件被更改为具有不同内容的更大文件,您将在本地文件末尾开始下载并添加新文件内容。你最终可能会成为垃圾。【参考方案4】:

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

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

See more info at GNU.

【讨论】:

【参考方案5】:

试试下面的参数:

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

示例用法:

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

【讨论】:

如链接问题所述,我不同意 - 如果使用 no-clobber 并且文件名存在,则退出。甚至没有 HEAD 请求。即使不是这种情况,请检查您是否有文件开头:-) [ ! -e "$(basename $URL)" ] && wget $URL 我想我可能会得到不同的结果,因为我使用的是--recursive 选项。 很好的答案!不同意ma11hew28。我刚刚使用 GNU Wget 1.14 和 wget -nc -i list.txt 在 3,000 个 URL 的列表中测试了这个。不要以为服务器可以在十分之一秒内抓取 3k 个链接! 此外,-N, --timestampingdon't re-retrieve files unless newer than local 如果您要同步,以防某些远程文件实际上值得重新下载(编辑:我现在看到另一个答案相同) .

以上是关于如果 wget 中已经存在文件,则跳过下载?的主要内容,如果未能解决你的问题,请参考以下文章

Android部分下载http

判断指定文件中是否包含指定内容,如果没有, 则写入,如果有,则跳过

shell 判断PID是不是存在,存在则kill掉,不存在则跳过

学习笔记TF023:下载缓存属性字典惰性属性覆盖数据流图资源

Python:如果条件为真,则跳过 For 循环中的迭代

linux wget指定下载目录和重命名