2016-04-27 3 views
0

Ich möchte Inhalte einer Jar-Datei suchen und suchen Sie einige Klassen-Datei in diesem Jar in Unix. Was ich getan habe, war jar -tvf "path_to_file/file_name.jar" | grep class_name_to_search. Danach kann ich leicht das gewünschte Ergebnis bekommen.jar -tvf arbeitet einzeln; aber kann nicht funktionieren, wenn in Bash-Skript enthalten

Das Problem kommt, wenn ich den obigen Befehl in einem einfachen Bash-Skript verwenden. Unten ist mein kleines Skript

#!/bin/bash nameToSearch=MyClassFileName str="" for i in $(find . -name "*.jar" | xargs [email protected] -d"\n" echo \"@\"); do # This is to append double quotes each line of the result of find command result=$(jar -tvf $i | grep $nameToSearch) echo "result: $result" done

Nun, was erhalten ist unter Fehler ist

Ergebnis:

java.util.zip.ZipException: error Zip-Datei bei Java in Öffnen .util.zip.ZipFile.open (Native Methode) bei java.util.zip.ZipFile. (ZipFile.java:127) bei java.util.zip.ZipFile. (ZipFile.java:88) bei Sonne .tools.jar.Main.list (Main.java:977) bei sun.tools.jar.Main.run (Main.java:222)

gibt es nur gewünschte Ergebnis, wenn ich hängen Sie nicht die Ergebnis des Suchbefehls mit ""; aber meine Anforderung ist, das Ergebnis mit doppelten Anführungszeichen anzufügen.

Jede Hilfe wird sehr geschätzt. Vielen Dank im Voraus

+0

Try "eval" wie folgt aus: Ergebnis = $ (eval "jar -tvf $ i | grep $ nameToSearch") – Sanj

+0

Danke, es hat funktioniert! – Vishal

Antwort

0

Das Problem ist jar tvf erlaubt nur eine Datei in weitergegeben werden

Die richtige Lösung der xargs nur sagen, ist auf einen Parameter verwenden pro Befehl: Für Bsp.: Jar tvf 1.jar; jar tvf 2.jar; ...

Versuchen Sie den Code in Bash-Skript zu ändern, kümmern folgende:

find . -name "*.jar" | xargs -n 1 jar tvf 

or 

find . -name "*.jar" | xargs -i jar tvf {} 
Verwandte Themen