Linux cmd, um unabhängig vom Jar-Pfad nach einer Klassendatei unter jars zu suchen
Will ich Suche nach einer bestimmten Klasse Datei unter viele jar-Dateien ohne Angabe der Lage der einzelnen jar-Datei.
Ist das möglich mit einem einfachen Befehl?
Habe ich versucht diesen Befehl:
grep Hello.class *.jar
Die nicht zurückgeben einer Liste der Gläser, die die Klasse enthält. Dann lief ich den Befehl:
grep Hello.class /full/path/of/jar/file/*.jar
Die Tat, die Rückkehr der einschlägigen jar-Datei. Gibt es einen besseren Weg?
InformationsquelleAutor der Frage AlwaysALearner | 2013-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wo sind Sie jar-Dateien? Gibt es ein Muster, um herauszufinden, wo Sie sind?
1. Sind Sie alle in einem Verzeichnis?
Beispielsweise
foo/a/a.jar
undfoo/b/b.jar
sind alle unter dem Ordnerfoo/
in diesem Fall könnten Siefind
mitgrep
:Sicher, zumindest können Sie suchen Sie unter dem root-Verzeichnis
/
aber es wird langsam.Als @loganaayahee sagte, man kann auch mit dem Befehl
locate
.locate
Suche die Dateien mit einem index, so wird es schneller sein. Aber sollte der Befehl sein:Seit dem Sie suchen wollen, die den Inhalt der jar-Dateien.
2. Sind die Pfade in einer Umgebungsvariablen gespeichert?
In der Regel, Java speichert die Pfade zu finden, die jar-Dateien in eine Umgebungsvariable wie
CLASS_PATH
ich weiß nicht, ob dies ist, was Sie wollen. Aber wenn die variable genau wie dieser:CLASS_PATH=/lib:/usr/lib:/bin
die einen:
trennen sich die Wege, dann könnten Sie diese loben die Suche in der Klasse:InformationsquelleAutor der Antwort Bin Wang
Meisten der Lösungen sind direkt mit
grep
Befehl, um die Klasse zu finden. Allerdings würde es Sie nicht geben Sie den Namen des Pakets der Klasse. Auch wenn die jar komprimiert ist,grep
wird nicht funktionieren.Diese Lösung ist mit
jar
Befehl zum auflisten des Inhalts der Datei undgrep
die Klasse, die Sie suchen.Wird es drucken Sie die Klasse mit package-Namen und auch die jar-Datei name.
Sie können auch suchen, mit Ihrem Paket-Namen wie unten:
InformationsquelleAutor der Antwort Wenbing Li
Geh einfach in das Verzeichnis, in dem sich Gläser und legen Sie unterhalb Befehl:
Hoffe, das hilft!
InformationsquelleAutor der Antwort tk_
Dem Befehl locate zu suchen, die alle Pfad der jeweiligen Datei
und display vollständigen Pfad der Datei.
Beispiel
InformationsquelleAutor der Antwort loganaayahee
Verwenden deepgrep und deepfind. Auf debian-basierten Systemen können Sie installieren, indem Sie:
Beiden Befehle suchen für verschachtelte Archive sowie. In Ihrem Fall würde der Befehl so Aussehen:
InformationsquelleAutor der Antwort meliniak
Linux, Exemplarische Vorgehensweise zu finden, um eine Klasse, die Datei unter den vielen Gläser.
Gehen Sie in das Verzeichnis mit den jars unter.
Ich bin auf der Suche nach dem Glas sorgt für die Producer-Klasse.
Verstehen, wie die for-Schleife arbeitet:
Verstehen, warum finden das funktioniert:
Können Sie die Pumpe alle die Gläser unten in der for-Schleife:
Jetzt können wir den Betrieb auf jeden:
Tun
jar tf
auf jedes Glas und Stopfen es in blah.txt:Überprüfen blah.txt es ist eine Liste aller Klassen in allen Gläser. Sie können suchen, die Datei für die Klasse, die Sie wollen, dann suchen Sie für das Glas, das vor ihm, das ist die, die Sie wollen.
InformationsquelleAutor der Antwort Eric Leschinski
Habe ich dieses kleine snippet. Vielleicht langsamer, aber funktioniert jedes mal.
InformationsquelleAutor der Antwort aayush singhal
InformationsquelleAutor der Antwort user6319683