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
    

相關內容