我想在许多 jar 文件中搜索一个特定的类文件,而不给出每个 jar 文件的位置。
这可以通过一个简单的命令来实现吗?
我试过这个命令:
grep Hello.class *.jar
它没有返回包含该类的 jar 列表。然后我运行命令:
grep Hello.class /full/path/of/jar/file/*.jar
确实返回了相关的 jar 文件。有没有更好的办法?
最佳答案
你的 jar 文件在哪里?是否有模式可以找到它们的位置?
1。它们都在一个目录中吗?
例如foo/a/a.jar
和foo/b/b.jar
都在foo/
文件夹下,在这种情况下,您可以将 find
与 grep
一起使用:
find foo/ -name "*.jar" | xargs grep Hello.class
可以,至少你可以在根目录/
下搜索,但是会很慢。
正如@loganaayahee 所说,您也可以使用命令locate
。 locate
使用索引搜索文件,这样会更快。但命令应该是:
locate "*.jar" | xargs grep Hello.class
因为你要搜索jar文件的内容。
2。路径是否存储在环境变量中?
通常,Java 会将查找 jar 文件的路径存储在像 CLASS_PATH
这样的环境变量中,我不知道这是否是您想要的。但是如果你的变量是这样的:CLASS_PATH=/lib:/usr/lib:/bin
,它使用 :
来分隔路径,那么你可以使用这个推荐搜索类:
for P in `echo $CLASS_PATH | sed 's/:/ /g'`; do grep Hello.calss $P/*.jar; done
关于Linux cmd 在 jar 中搜索类文件,而不考虑 jar 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373788/