spring
나는 그 이름에 들어 있는 모든 항아리를 찾으려고 노력하고 있습니다 . 저는 Windows로 작업하고 cygwin을 사용하여 Linux 명령을 실행하고 있습니다. 아래 명령이 올바르게 보입니까?
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
어떤 이유로 아직 처리 중이며 화면에 결과가 표시되지 않습니다. 특정 이름의 jar 파일을 grep하는 빠른 방법이 있습니까?
예를 들어, 다음은 spring이 포함된 유효한 jar 파일입니다.
spring-web.jar
spring-core.jar
test-spring.jar
답변1
나는 명령이 인수를 통해 jar
여러 파일을 허용한다고 믿지 않으므로 AFAIK에서 모든 파일을 처리하는 단일 호출은 불가능합니다. 각 파일에 대해 하나의 exec 호출을 방지하여 작업 속도를 높이는 한 가지 옵션 은 다음과 같습니다..jar
jar
.jar
find
.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
귀하가 찾고 있는 파일이 반환되지 않습니다.
이제 명령이 수행하는 작업을 이해하려면
- 먼저 이름이
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