【问题标题】:how to use wget spider to identify broken urls from a list of urls and save broken ones如何使用 wget spider 从 URL 列表中识别损坏的 URL 并保存损坏的 URL
【发布时间】:2019-09-04 08:44:42
【问题描述】:

我正在尝试编写一个 shell 脚本来从 url 列表中识别损坏的 url。

这里是 input_url.csv 示例:

https://www.google.com/
https://www.nbc.com
https://www.google.com.hksjkhkh/
https://www.google.co.jp/
https://www.google.ca/

这是我所拥有的:

    wget --spider -nd -nv -H --max-redirect 0 -o run.log -i input_url.csv

这给了我 '2019-09-03 19:48:37 URL: https://www.nbc.com 200 OK' 对于有效的 URL,而对于损坏的 URL,它给了我 '0 个重定向超出。'

我希望我只想将那些损坏的链接保存到我的输出文件中。

样本期望输出:

https://www.google.com.hksjkhkh/

【问题讨论】:

  • 而且我的 input_url 文件很大,所以我应该有一个可以高效运行的脚本。
  • 您能否发布输入文件的示例部分(如 5 行)和输出的示例部分(如 5 行)。为每个链接并行运行wget 不是更好吗?
  • 当然,让我发布一个例子。
  • 发布了一个示例 url 文件。以及如何并行运行wget? @KamilCuk

标签: linux shell wget


【解决方案1】:

我想我会选择:

<input.csv xargs -n1 -P10 sh -c 'wget --spider --quiet "$1" || echo "$1"' --

您可以使用-P &lt;count&gt; 选项到xargs 来并行运行count 进程。

xargs 为输入文件的每一行运行命令 sh -c '....' --,并将输入文件行作为参数附加到脚本。

然后sh 内部运行wget ... "$1"|| 检查返回状态是否为非零,表示失败。在wget 失败时,将执行echo "$1"

Live code link at repl.

您可以过滤wget -nd -nv 的输出,然后对输出进行正则表达式,就像

wget --spider -nd -nv -H --max-redirect 0 -i input 2>&1 | grep -v '200 OK' | grep 'unable' | sed 's/.* .//; s/.$//'

但这看起来不是消耗品,不是并行的,所以可能更慢并且可能不值得麻烦。

【讨论】:

  • 对不起,我不精通shell,为什么我们前面有&lt;?,你能给我一个指定的示例命令吗?谢谢!
  • 这是一个指定的示例命令。您可以复制该行并使用它。 &lt; 将文件重定向到命令 stdin。与cat input.csv | xargs .... 相同。 &lt; file 可以在命令中的任何位置,因此您可以使用&lt; input.csv xargs echoxargs &lt;input.csv echosome reference 如果你想测试它,我添加了代码链接到 repl。我喜欢把输入重定向放在前面,但如果你喜欢它最好做xargs -l -P10 ..... &lt; input.csv
  • 为什么会出现这个错误? xargs: illegal option -- l@KamilCuk
  • 你在一些奇怪的 linux 上吗?苹果系统?惠普/用户体验?等等?
  • 我在 MacOS @KamilCuk
猜你喜欢
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多