我想在许多jar文件中搜索特定的类文件,而不给出每个jar文件的位置.
这可以用简单的命令吗?
我试过这个命令:
grep Hello.class *.jar
Run Code Online (Sandbox Code Playgroud)
哪个没有返回包含该类的jar列表.然后我运行了命令:
grep Hello.class /full/path/of/jar/file/*.jar
Run Code Online (Sandbox Code Playgroud)
哪个确实返回了相关的jar文件.有没有更好的办法?
Bin*_*ang 84
jar文件在哪里?是否有模式可以找到它们的位置?
例如,foo/a/a.jar
并且foo/b/b.jar
是所有的文件夹下foo/
,在这种情况下,你可以使用find
带grep
:
find foo/ -name "*.jar" | xargs grep Hello.class
Run Code Online (Sandbox Code Playgroud)
当然,至少你可以在根目录下搜索它们/
,但它会很慢.
正如@loganaayahee所说,您也可以使用该命令locate
.locate
使用索引搜索文件,因此速度会更快.但命令应该是:
locate "*.jar" | xargs grep Hello.class
Run Code Online (Sandbox Code Playgroud)
因为您要搜索jar文件的内容.
通常,Java会存储路径以在环境变量中查找jar文件CLASS_PATH
,我不知道这是否是你想要的.但是如果你的变量是这样的:CLASS_PATH=/lib:/usr/lib:/bin
使用a :
来分隔路径,那么你可以使用这个推荐来搜索类:
for P in `echo $CLASS_PATH | sed 's/:/ /g'`; do grep Hello.calss $P/*.jar; done
Run Code Online (Sandbox Code Playgroud)
Wen*_* Li 28
大多数解决方案都是直接使用grep
命令来查找类.但是,它不会为您提供该类的包名称.如果罐子被压缩,grep
也行不通.
此解决方案使用jar
命令列出文件的内容和grep
您要查找的类.
它将使用包名称和jar文件名打印出类.
find . -type f -name '*.jar' -print0 | xargs -0 -I '{}' sh -c 'jar tf {} | grep Hello.class && echo {}'
Run Code Online (Sandbox Code Playgroud)
您也可以使用下面的包名搜索:
find . -type f -name '*.jar' -print0 | xargs -0 -I '{}' sh -c 'jar tf {} | grep com/mypackage/Hello.class && echo {}'
Run Code Online (Sandbox Code Playgroud)
只需转到包含 jar 的目录并插入以下命令:
find *.jar | xargs grep className.class
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
归档时间: |
|
查看次数: |
108268 次 |
最近记录: |