我在寻找一个脚本来为站点地图创建URL列表,并发现了以下内容:
wget --spider --force-html -r -l1 http://sld.tld 2>&1 \
| grep '^--' | awk '{ print $3 }' \
| grep -v '\.\(css\|js\|png\|gif\|jpg\|ico\|txt\)$' \
> urllist.txt
结果是:
http://sld.tld/
http://sld.tld/
http://sld.tld/home.html
http://sld.tld/home.html
http://sld.tld/news.html
http://sld.tld/news.html
...
每个URL条目保存两次。应该如何更改脚本来解决此问题?
最佳答案
如果在使用--spider
标志时查看wget的输出,则它将类似于:
Spider mode enabled. Check if remote file exists.
--2013-04-12 22:01:03-- http://www.google.com/intl/en/about/products/
Connecting to www.google.com|173.194.75.103|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain links to other resources -- retrieving.
--2013-04-12 22:01:03-- http://www.google.com/intl/en/about/products/
Reusing existing connection to www.google.com:80.
HTTP request sent, awaiting response... 200 OK
它检查链接是否存在(从而打印出
--
),然后必须下载该链接以查找其他链接(因此第二个--
)。这就是为什么当您使用--spider
时它会显示(至少两次)的原因。将其与不使用
--spider
进行比较:Location: http://www.google.com/intl/en/about/products/ [following]
--2013-04-12 22:00:49-- http://www.google.com/intl/en/about/products/
Reusing existing connection to www.google.com:80.
因此,您只会得到以
--
开头的一行。您可以删除
--spider
标志,但仍然可以得到重复的标志。如果您真的不想重复,请在命令中添加| sort | uniq
:wget --spider --force-html -r -l1 http://sld.tld 2>&1 \
| grep '^--' | awk '{ print $3 }' \
| grep -v '\.\(css\|js\|png\|gif\|jpg\|ico\|txt\)$' \
| sort | uniq > urllist.txt
关于linux - wget Spider两次返回所有URL-错误在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15983130/