Ich versuche, alle Jars zu finden, die „ spring
in ihrem Namen“ enthalten. Ich arbeite mit Windows und verwende Cygwin, um die Linux-Befehle auszuführen. Sieht mein folgender Befehl richtig aus?
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
Aus irgendeinem Grund wird es immer noch verarbeitet und das Ergebnis wird nicht auf dem Bildschirm angezeigt. Gibt es eine schnelle Möglichkeit, die JAR-Datei mit einem bestimmten Namen zu greppen?
Nachfolgend sind beispielsweise die gültigen JAR-Dateien aufgeführt, die Spring enthalten:
spring-web.jar
spring-core.jar
test-spring.jar
Antwort1
Ich glaube nicht, dass der jar
Befehl mehrere .jar
Dateien als Argumente akzeptiert, daher kommt meines Wissens ein einzelner jar
Aufruf, der alle Dateien anspricht, .jar
nicht in Frage. Eine Möglichkeit, die Dinge zu beschleunigen, indem man einen find
Exec-Aufruf für jede .jar
Datei vermeidet, ist die folgende
find . -name '*.jar' -exec sh -c \
'for f; do jar -tf "$f" | grep --label="$f" "spring"; done' sh {} +
Antwort2
Der folgende Befehl sucht nach den JAR-Dateien, die eine Teilzeichenfolge spring
enthalten.
find /some/dir -type f -name "*spring*.jar"
Nun durchsucht Ihr ursprünglicher Befehl den Inhalt, der nicht dem entspricht, was der umgebende Text oder die Beispiele sagen.
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
Finden Sie bitteDasChat-Beschreibung, in der Gilles erklärt, warum der obige Befehl nicht das ist, wonach Sie suchen.
Testen
[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
Ausgabe:
[root@keithpc jar_check]# find ./ -type f -name "*spring*.jar"
./no_sss_spring.jar
./1spring.jar
./spring1.jar
Wie Sie sehen, spring.txt
wird die Datei nicht zurückgegeben. Ich glaube, dass sie das ist, wonach Sie suchen.
Um nun zu verstehen, was Ihr Befehl bewirkt,
- Zuerst habe ich eine Java-Datei mit dem Namen erstellt
springtest
. - Jetzt erstelle ich die
class
Datei, indem ich denjava
Befehl auf derjava
Datei ausführe. - Jetzt füge ich es der JAR-Datei hinzu, indem ich den JAR-Befehl ausführe.
Wenn ich jetzt Ihren Befehl ausführe, wird mir die
class
Datei zurückgegeben und nicht die JAR-Datei, nach der Sie suchen.[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