grep jar 文件中特定名称的最快方法?

grep jar 文件中特定名称的最快方法?

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文件未返回,我相信这就是您正在寻找的内容。

现在,要了解您的命令的作用,

  1. 首先,我创建了一个名为 .java 的文件springtest
  2. 现在,我通过在文件上 class运行命令来创建文件。javajava
  3. 现在,我通过运行 jar 命令将其添加到 jar 文件中。
  4. 现在,当我运行您的命令时,它将返回您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
    

相关内容