jar 파일에서 특정 이름을 찾는 가장 빠른 방법은 무엇입니까?

jar 파일에서 특정 이름을 찾는 가장 빠른 방법은 무엇입니까?

spring나는 그 이름이 들어 있는 모든 항아리를 찾으려고 노력하고 있습니다. 저는 Windows를 사용하고 있으며 cygwin을 사용하여 Linux 명령을 실행하고 있습니다. 아래 명령이 올바른 것 같나요?

find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;

어떤 이유로든 아직 처리 중이며 결과가 아직 화면에 표시되지 않습니다. 특정 이름의 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. 이제 명령을 실행하면 classjar 파일 대신 찾고 있는 파일이 반환됩니다.

     [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
    

관련 정보