【问题标题】:Passing curl results to wget with bash使用 bash 将 curl 结果传递给 wget
【发布时间】:2015-05-13 15:01:59
【问题描述】:

我有一个小脚本想与 cron 一起使用。 目的:获取带有链接的网页,从链接中提取日期并下载文件。 下面的脚本不能 100% 工作,我看不到问题。

#!/bin/bash
for i in $(curl http://107.155.72.213/anarirecap.php 2>&1 | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | grep '_whole_1_3000.mp4'); do
GAMEDAY=$(echo "$i" | grep -Eo '[[:digit:]]{4}/[[:digit:]]{2}/[[:digit:]]{2}')
wget "$i" --output-document="$GAMEDAY.mp4"
done

它是网页“curl http://...etc” - 工作

$DAY - 提取日期 - 有效。

当我添加 $DAY 时,wget 部分不起作用。我瞎了……我错过了什么。

【问题讨论】:

  • set -x 说发生了什么?
  • 在不同的点上,mywiki.wooledge.org/DontReadLinesWithFor。就我个人而言,我会以完全不同的方式编写这段代码,使用适当的 HTML 解析器来提取链接(如果内容是 XHTML,xmlstarlet 可以解决问题;xmllint --html 可以将 HTML 转换为 XHTML,如果不是),而不是试图到处乱搞grep.
  • 另外,你有一堆引用错误。 shellcheck.net 会向你指出这些。
  • 不过,除此之外,如果没有您正在使用的 real URL,或者在某个地方粘贴复制错误的示例 HTML 文件(如果您无法显示正版代码)?
  • 另外,你根本不需要 grep 来提取日期; bash 内置了带有 =~ 运算符的正则表达式支持。

标签: bash curl wget


【解决方案1】:

在此处查看您的输出格式:

wget "$i" -O 2015/05/12.mp4

这正在寻找一个名为 2015 的目录以及一个名为 05 的子目录,用于放置文件 12.mp4。这些目录不存在,所以你得到2015/05/12.mp4: No such file or directory

如果要将/s 替换为下划线:

wget -O "${GAMEDAY//\//_}" "$i"

或者,如果您想创建不存在的目录:

mkdir -p -- "(dirname "$GAMEDAY")"
wget -O "$GAMEDAY" "$i"

【讨论】:

  • 就是这样。我没有目录 2015 及其子文件夹。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
相关资源
最近更新 更多