我想在许多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 次 |
| 最近记录: |