2013-04-07 34 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

相關問題