2013-05-03 68 views
2

我試圖找到使用下面這個鏈接給出的命令,它包含了我的類的JAR文件:Find a jar file given the class name?查找在Linux中一個類文件存在於JAR

find . -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} GenericClassLoader' \; 

,但我得到的錯誤是:

java.util.zip.ZipException: error in opening zip file 
     at java.util.zip.ZipFile.open(Native Method) 
     at java.util.zip.ZipFile.<init>(ZipFile.java:131) 
     at java.util.zip.ZipFile.<init>(ZipFile.java:92) 
     at sun.tools.jar.Main.list(Main.java:997) 
     at sun.tools.jar.Main.run(Main.java:242) 
     at sun.tools.jar.Main.main(Main.java:1167) 

請幫我理解命令以及如何解決這個錯誤。我正在使用bash shell。

回答

4

也有一些是在你的文件系統,它與*.jar結束,但它不是一個有效的存檔。要調試這一點,添加-printfind命令:

find . -name "*.jar" -print -exec ... 

這將使find打印文件的名稱它試圖執行sh命令。

說明:

  • find .:查找當前目錄
  • -name "*.jar"名稱以.jar
  • -exec結束的所有文件和文件夾,併爲他們每個人的執行下面的命令
  • sh -c創建一個新的外殼和執行...
  • jar -tf {}測試一個JAR存檔。這(也)打印在存檔find文件的列表將與它發現
  • |jar -tf到結果歸檔的路徑替換{} ...
  • grep搜索輸入...
  • -H打印的文件名每場比賽
  • --label {}因爲我們正在從標準輸入讀取,grep應該使用{}(再次找到替代)作爲文件名
  • GenericClassLoader小號對於操作搜索此字符串的jar -tf
+0

非常感謝阿龍輸出,是否有隱藏的錯誤消息,並只顯示正確的輸出方式?我能夠從輸出中找到jar文件,但我有幾乎100條錯誤信息 – Chaitanya 2013-05-03 10:18:00

+0

在'{}'和'|'之間加上'2>&dev/null:''jar -tf {} 2>&/ dev/null | grep' – 2013-05-03 10:31:28

+0

我想我在這裏錯過了一些東西,我正在使用這個命令:'find。 -name「* .jar」-exec sh -c'jar -tf {} 2>&/ dev/null | grep -H --label {} GenericClassLoader'\;'但我的錯誤是'sh:/ dev/null:模棱兩可的重定向,請幫助我。 – chaitanya 2013-05-03 11:09:57

相關問題