从zip文件流中获取第一个文件名?

时间:2013-04-07 19:41:44

标签: bash header zip

我想从远程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"

当我在ASCII模式下使用shell时,它正在工作,但我最近将其切换为UTF-8,而且似乎sed现在正在尊重它,这会破坏我的脚本。

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

export LANG=
curl -s ...

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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

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

在“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}"

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