2011-08-15 36 views
61

我需要從「some.jar」讀MANIFEST.MF行家清單文件使用bash如何使用bash

+3

jar文件只是zip文件。 –

回答

111
$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF 
  • -q將抑制來自解壓縮程序的詳細輸出來讀取JAR MANIFEST.MF文件
  • -c將提取到stdout

實施例:

$ unzip -q -c commons-lang-2.4.jar META-INF/MANIFEST.MF 

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.0 
Created-By: 1.5.0_13-119 (Apple Inc.) 
Package: org.apache.commons.lang 
Extension-Name: commons-lang 
Specification-Version: 2.4 
Specification-Vendor: Apache Software Foundation 
Specification-Title: Commons Lang 
Implementation-Version: 2.4 
Implementation-Vendor: Apache Software Foundation 
Implementation-Title: Commons Lang 
Implementation-Vendor-Id: org.apache 
X-Compile-Source-JDK: 1.3 
X-Compile-Target-JDK: 1.2 

或者,您可以使用-p而不是-q -c

-p提取文件到管(標準輸出)。只有文件數據纔會發送到stdout,並且文件始終以二進制格式提取,就像存儲(不進行轉換)一樣。

+1

我知道這個線程是舊的,但它可能涉及的人:從手冊中,使用-p或-c解壓縮將以二進制形式打印輸出。如果你需要以某種方式解析這個輸出(比如關聯數組),你應該用-aa參數強制文本表示,以使其正確。 – tcigler

12

使用unzip

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF 

將靜靜(-q)讀出的路徑META-INF /從jar文件MANIFEST.MF到stdout(-c)(它是使用zip格式壓縮)。然後,您可以通過管道將輸出到其它命令來回答,如「什麼是這個罐子主類問題:

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2 

(由此,能夠消除不包含字符串Main-Class所有行,然後在分割的:線,只保留第二個字段,類名)。當然,要麼適當地定義$JARFILE_PATH,要麼將$JARFILE_PATH替換爲您感興趣的jar文件的路徑。

4

根據您的發行版,安裝unzip軟件包。然後,只需發出

unzip -p YOUR_FILE.jar META-INF/MANIFEST.MF 

這會將內容轉儲到標準輸出。

HTH

0

$ tar xfO some.jar META-INF/MANIFEST.MF

x提取物和O重定向到標準輸出。

注意:似乎只能在bsdtar中工作,而不能在GNU tar中工作。

0

其他人已經發布了關於使用unzip -p和管道進行grep或awk或任何你需要的東西。雖然這適用於大多數情況,但值得注意的是,由於MANIFEST.MF每行72個字符的限制,因此您可能會對其值在多行中分割的鍵進行拼寫處理,因此將非常難以解析。我很想看到一個實際上可以將渲染值從文件中提取出來的CLI工具。

http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html