我想从远程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 ...
但这似乎是一个更大的黑客。
有更好的方法吗?
答案 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(如果你需要)。