为什么 `find . -name '*.jar' | xargs jar tf` 不起作用?

为什么 `find . -name '*.jar' | xargs jar tf` 不起作用?

我跑了这个

find . -name '*.jar' | xargs jar tf

希望它能找到所有.jar文件并执行jar tf它们(以查看内容)。但它似乎不起作用!

答案1

您使用的xargs方式jar tf错误。

的初衷xargs是通过尽可能多的文件因此你最终会得到几个jar tf file1 file2 file3 file4 ... file200 ...调用。

jar t,就像tar t,只接受.jar 文件。所有剩余参数都充当过滤器列出/提取的内容。例如,jar tf thing.jar org/example仅列出“org/example”子目录中的文件。

因此,如果你运行jar tf file1.jar file2.jar file3.jar,它只会读取文件1.jar,并期望其余部分与文件匹配之内档案。

因此你需要告诉xargs运行命令每个文件一次

find ... | xargs -d '\n' -n 1 jar tf

(该-d '\n'选项与您的问题无关,但无论如何这是一个好主意 - 以防您碰巧发现一些文件名称中带有空格。)

更直接的方法是:

find ... -exec jar tf {} \;

相关内容