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
파일은 반환되지 않습니다. 나는 이것이 귀하가 찾고 있는 것이라고 생각합니다.
이제 명령이 수행하는 작업을 이해하려면
- 먼저 .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