2

我想通过在特定目录(DIR)及其所有子目录中搜索来查找包含给定 jar 文件的列表。

我尝试了以下命令。但它提供了所有包含 CLASS FILE 名称的类。
例如:如果类是Message.class,则以下命令HttpMessage.class也会输出类似的类。

find <DIR> -name '*.jar' | while read F; do (echo $F; jar -tvf $F | grep <class>) done - prints the jar name if the class exists then prints the class name.
4

4 回答 4

9

usinggrep可以找到匹配的jar,但是它不能列出类的命名空间。

下面的命令结合findjar命令,它将打印出带有包名的类以及jar 文件名

find . -type f -name '*.jar' -print0 |  xargs -0 -I '{}' sh -c 'jar tf {} | grep Message.class &&  echo {}'

您还可以使用您的包名称进行搜索,如下所示:

find . -type f -name '*.jar' -print0 |  xargs -0 -I '{}' sh -c 'jar tf {} | grep com/mypackage/Message.class &&  echo {}'
于 2013-10-09T01:34:34.147 回答
2

这是我为这个问题开发的一个程序:https ://github.com/javalite/jar-explorer

于 2016-01-03T23:09:11.043 回答
1

您可以在 grep 中使用正则表达式来指定精确匹配条件。如果您希望该行以/Message.class 结尾,您可以执行以下操作:

grep '/Message.class$'

于 2013-02-19T08:26:41.247 回答
0

您也可以尝试grep -iRl "name_of_your_class"

于 2020-11-27T07:26:23.653 回答