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

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

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

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

【问题讨论】:

    标签: parameters download command-line-interface wget


    【解决方案1】:

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

    Timestamping, wget docs:

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

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

    使用test

    test -f stackoverflow.html || wget -O stackoverflow.html https://stackoverflow.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 如果您要同步,以防某些远程文件实际上值得重新下载(编辑:我现在看到另一个答案相同) .
        猜你喜欢
        • 2020-06-14
        • 2012-09-03
        • 2016-05-30
        • 1970-01-01
        • 2021-06-03
        • 2019-07-10
        • 2021-08-15
        • 2013-11-07
        • 1970-01-01
        相关资源
        最近更新 更多