jar -tvf正在单独工作;但是当包含在bash脚本

时间:2016-04-27 04:05:43

标签: bash jar

我想查看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命令的结果时才会得到想要的结果;但我的要求是用双引号附加结果。

任何帮助都将受到高度赞赏。提前致谢

1 个答案:

答案 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 {}