Estou tentando encontrar todos os potes que tem spring
no nome. Estou trabalhando com Windows e usando o cygwin para executar os comandos do Linux. Meu comando abaixo parece certo?
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
Por algum motivo, ainda está processando e não aparece o resultado na tela. Alguma maneira rápida de usar o grep no arquivo jar com um nome específico?
Por exemplo, abaixo estão os arquivos jar válidos que contêm spring -
spring-web.jar
spring-core.jar
test-spring.jar
Responder1
Não acredito que o jar
comando aceite vários .jar
arquivos por meio de argumentos, portanto, uma única jar
invocação do AFAIK abordando todos .jar
os arquivos está fora de questão. Uma opção para acelerar as coisas evitando uma find
invocação exec para cada .jar
arquivo é a seguinte
find . -name '*.jar' -exec sh -c \
'for f; do jar -tf "$f" | grep --label="$f" "spring"; done' sh {} +
Responder2
O comando abaixo procuraria os arquivos jar que contêm substring spring
.
find /some/dir -type f -name "*spring*.jar"
Agora, seu comando original examina o conteúdo, que não é o que diz o texto ou os exemplos.
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
Por favor acheessedescrição do chat onde Gilles explica porque o comando acima não é o que você está procurando.
Teste
[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
Saída:
[root@keithpc jar_check]# find ./ -type f -name "*spring*.jar"
./no_sss_spring.jar
./1spring.jar
./spring1.jar
Como você pode ver, o spring.txt
arquivo não foi retornado, o que acredito ser o que você está procurando.
Agora, para entender o que seu comando faz,
- Primeiro criei um arquivo java que tem o nome
springtest
. - Agora, eu crio o
class
arquivo executando ojava
comando nojava
arquivo. - Agora, adiciono-o ao arquivo jar executando o comando jar.
Agora, quando eu executar seu comando, ele retornará o
class
arquivo em vez do arquivo jar que você está procurando.[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