我想通过在特定目录(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.
答案 0 :(得分:8)
使用grep
可以找到匹配的jar,但是,它无法列出该类的命名空间。
下面的命令与find
和jar
命令相结合,会打印出包名为的类以及 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 {}'
答案 1 :(得分:2)
这是我为此问题开发的程序:https://github.com/javalite/jar-explorer
答案 2 :(得分:1)
您可以在grep中使用regex来指定完全匹配的条件。如果您希望该行以 /Message.class 结束,您可以执行以下操作:
grep '/Message.class$'
答案 3 :(得分:0)
您也可以尝试 grep -iRl“您的课程的名称”