spring
我正在尝试找到其名称中包含的所有罐子。我正在使用 Windows 并使用 cygwin 来运行 linux 命令。我的下面的命令看起来正确吗?
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
由于某种原因,它仍在处理中,尚未在屏幕上显示结果。有什么快速的方法来 grep 具有特定名称的 jar 文件吗?
例如,下面是包含 spring 的有效 jar 文件 -
spring-web.jar
spring-core.jar
test-spring.jar
答案1
我不相信该jar
命令.jar
通过参数接受多个文件,因此据我所知,一次jar
调用处理所有.jar
文件是不可能的。通过避免find
对每个文件调用一次 exec 来加快速度的一种选项.jar
如下
find . -name '*.jar' -exec sh -c \
'for f; do jar -tf "$f" | grep --label="$f" "spring"; done' sh {} +
答案2
下面的命令将查找其中包含子字符串的 jar 文件spring
。
find /some/dir -type f -name "*spring*.jar"
现在,您的原始命令会查看内容,这不是它周围的文本或示例所说的内容。
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
请找到这Gilles 解释了为什么上述命令不是您要查找的命令的聊天描述。
测试
[root@keithpc check]# cd jar_check/
[root@keithpc jar_check]# ls
[root@keithpc jar_check]# touch spring1.jar
[root@keithpc jar_check]# touch 1spring.jar
[root@keithpc jar_check]# touch no_sss_spring.jar
[root@keithpc jar_check]# touch spring.txt
输出:
[root@keithpc jar_check]# find ./ -type f -name "*spring*.jar"
./no_sss_spring.jar
./1spring.jar
./spring1.jar
如您所见,spring.txt
文件未返回,我相信这就是您正在寻找的内容。
现在,要了解您的命令的作用,
- 首先,我创建了一个名为 .java 的文件
springtest
。 - 现在,我通过在文件上
class
运行命令来创建文件。java
java
- 现在,我通过运行 jar 命令将其添加到 jar 文件中。
现在,当我运行您的命令时,它将返回您
class
正在查找的文件而不是 jar 文件。[root@keithpc jar_check1]# javac springtest.java [root@keithpc jar_check1]# java springtest Hello,spring [root@keithpc jar_check1]# jar cvf springtest.jar springtest.class added manifest adding: springtest.class(in = 426) (out= 286)(deflated 32%) ##Here I run your command after creating the jar file. [root@keithpc jar_check1]# find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \; ##As you can see, it returns me the class file rather than the jar file as the output. springtest.class