我想查看jar文件的内容,并在unix中搜索该jar中的一些类文件。
我做的是jar -tvf "path_to_file/file_name.jar" | grep class_name_to_search
。在此之后,我可以轻松获得理想的结果。
当我在一个简单的bash脚本中使用上面的命令时,会出现问题。 下面是我的小脚本
#!/bin/bash
nameToSearch=MyClassFileName
str=""
for i in $(find . -name "*.jar" | xargs -I@ -d"\n" echo \"@\" ); do # This is to append double quotes each line of the result of find command
result=$(jar -tvf $i | grep $nameToSearch)
echo "result: $result"
done
现在得到的是错误
结果:
java.util.zip.ZipException:打开zip文件时出错 at java.util.zip.ZipFile.open(Native Method) 在java.util.zip.ZipFile。(ZipFile.java:127) 在java.util.zip.ZipFile。(ZipFile.java:88) 在sun.tools.jar.Main.list(Main.java:977) 在sun.tools.jar.Main.run(Main.java:222)
只有当我没有用“”附加find命令的结果时才会得到想要的结果;但我的要求是用双引号附加结果。
任何帮助都将受到高度赞赏。提前致谢
答案 0 :(得分:0)
问题是jar tvf只允许传入一个文件。
正确的解决方案是告诉xargs每个命令只使用一个参数: 例如:jar tvf 1.jar; jar tvf 2.jar; ...
尝试在bash脚本中修改代码以处理以下事项:
find . -name "*.jar" | xargs -n 1 jar tvf
or
find . -name "*.jar" | xargs -i jar tvf {}