1

我只想从远程 zip 存档中提取第一个文件名,而不下载整个 zip。特别是,我正在尝试获取dartium (link to zip file)的内部版本号。由于文件很大,我不想下载整个文件。

如果我下载整个内容,unzip -l则报告第一个文件为:0 2013-04-07 12:18 dartium-lucid64-inc-21033.0/. 我只想得到这个文件名,这样我就可以把这21033部分解析为内部版本号。

我正在这样做(完全破解):

_url="https://storage.googleapis.com/dartium-archive/continuous/dartium-lucid64.zip"
curl -s $_url | head -c 256 | sed -n "s:.*dartium-lucid64-inc-\([0-9]\+\).*:\1:p"

当我的 shell 处于 ASCII 模式时它正在工作,但我最近将它切换到 UTF-8 并且似乎 sed 现在正在尊重它,这破坏了我的脚本。

我想通过这样做来破解它:

export LANG=
curl -s ...

但这似乎是一个更大的黑客攻击。

有没有更好的办法?

4

1 回答 1

1

首先,您可以使用 curl 设置字节范围。

接下来,使用“字符串”从二进制流中提取所有字符串。

在“p”之后添加“q”以在仅找到第一次出现后退出。

curl -s $_url -r0-256 | strings | sed -n "s:.*dartium-lucid64-inc-\([0-9]\+\).*:\1:p;q"

或这个:

curl -s $_url -r0-256 | strings | sed -n "/dartium-lucid64/{s:.*-\([^-]\+\)\/.*:\1:p;q}"

它必须更快,更可靠。它还提取完整版本,包括颠覆(如果需要)。

于 2013-04-07T21:34:58.480 回答