2013-04-07 72 views
1

我想从远程zip存档中仅提取第一个文件名,而不下载整个zip文件。特别是,我试图获得内部编号dartium (link to zip file)。由于该文件相当大,我不想下载整个文件。只抓取zip文件流中的第一个文件名?

如果我下载整个东西,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 ... 

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

有没有更好的方法?

+0

这是一个非常酷的解决方案来获取有关文件列表的信息,而无需下载整个文件,谢谢! – 2013-04-07 21:22:44

回答

1

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

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

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

它必须是一个有点更快,更可靠。它也提取完整版本,包括颠覆(如果你需要的话)。

+0

+1只是一点点比我的hacky。 – tjameson 2013-04-07 21:57:13

相关问题