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