【发布时间】: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
这是运行 wget 的最简单示例:
wget http://www.example.com/images/misc/pic.png
但是如果pic.png已经可用,如何让wget跳过下载?
【问题讨论】:
标签: parameters download command-line-interface wget
我在使用 -N 时遇到问题,因为我想将输出保存到不同的文件名。
如果满足以下两个条件之一,则文件被视为新文件:
- 本地不存在同名文件。
- 确实存在同名文件,但远程文件的修改时间比本地文件晚。
使用test:
test -f stackoverflow.html || wget -O stackoverflow.html https://stackoverflow.com/
如果文件存在不存在,test 将评估为 FALSE,因此将执行 wget。
【讨论】:
-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 是更好的解决方案。
wget 将抱怨Last-modified header missing;这正是概述的情况。
我正在寻找的答案是https://unix.stackexchange.com/a/9557/114862。
当本地文件大于或等于服务器版本时使用
-c标志将避免重新下载。
【讨论】:
wget -i filelist.txt -c 将恢复失败的文件列表下载。
-c 表示continue。如果文件被更改为具有不同内容的更大文件,您将在本地文件末尾开始下载并添加新文件内容。你最终可能会成为垃圾。
当使用-r 或-p 运行Wget,但没有-N、-nd 或-nc 时,重新下载文件将导致新副本简单地覆盖旧副本。
因此添加-nc 将阻止此行为,而是导致保留原始版本并忽略服务器上的任何较新副本。
【讨论】:
试试下面的参数:
-nc,--no-clobber:跳过会下载到的下载 现有文件。
示例用法:
wget -nc http://example.com/pic.png
【讨论】:
[ ! -e "$(basename $URL)" ] && wget $URL
--recursive 选项。
wget -nc -i list.txt 在 3,000 个 URL 的列表中测试了这个。不要以为服务器可以在十分之一秒内抓取 3k 个链接!
-N, --timestamping 说 don't re-retrieve files unless newer than local 如果您要同步,以防某些远程文件实际上值得重新下载(编辑:我现在看到另一个答案相同) .