Estoy tratando de encontrar todos los frascos que tiene spring
su nombre. Estoy trabajando con Windows y usando cygwin para ejecutar los comandos de Linux. ¿Mi siguiente comando se ve bien?
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
Por alguna razón, todavía se está procesando y no aparece el resultado en la pantalla. ¿Alguna forma rápida de recuperar el archivo jar con un nombre particular?
Por ejemplo, a continuación se muestran los archivos jar válidos que contienen Spring:
spring-web.jar
spring-core.jar
test-spring.jar
Respuesta1
No creo que el jar
comando acepte múltiples .jar
archivos a modo de argumentos, por lo que AFAIK una sola jar
invocación que aborde todos .jar
los archivos está fuera de discusión. Una opción para acelerar las cosas evitando una find
invocación ejecutiva para cada .jar
archivo es la siguiente
find . -name '*.jar' -exec sh -c \
'for f; do jar -tf "$f" | grep --label="$f" "spring"; done' sh {} +
Respuesta2
El siguiente comando buscará los archivos jar que contengan una subcadena spring
.
find /some/dir -type f -name "*spring*.jar"
Ahora, su comando original revisa el contenido, que no es lo que dice el texto que lo rodea o los ejemplos.
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
Por favor encuentraesteDescripción del chat donde Gilles explica por qué el comando anterior no es lo que estás buscando.
Pruebas
[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
Producción:
[root@keithpc jar_check]# find ./ -type f -name "*spring*.jar"
./no_sss_spring.jar
./1spring.jar
./spring1.jar
Como puede ver, el spring.txt
archivo no se devuelve, lo cual creo que es lo que está buscando.
Ahora, para entender lo que hace tu comando,
- Primero, creé un archivo java que tiene el nombre
springtest
. - Ahora creo el
class
archivo ejecutando eljava
comando en eljava
archivo. - Ahora lo agrego al archivo jar ejecutando el comando jar.
Ahora, cuando ejecuto su comando, me devolverá el
class
archivo en lugar del archivo jar que está buscando.[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