2

このリンクにある以下のコマンドを使用して、クラスを含む JAR ファイルを見つけようとしています:クラス名が指定された jar ファイルを検索しますか?

find . -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} GenericClassLoader' \;

しかし、次のようなエラーが発生しています:

java.util.zip.ZipException: error in opening zip file
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:131)
        at java.util.zip.ZipFile.<init>(ZipFile.java:92)
        at sun.tools.jar.Main.list(Main.java:997)
        at sun.tools.jar.Main.run(Main.java:242)
        at sun.tools.jar.Main.main(Main.java:1167)

コマンドを理解し、このエラーを解決する方法を教えてください。私はbashシェルを使用しています。

4

1 に答える 1

4

あなたのファイルシステムには何かがあり、*.jarこれは有効なアーカイブではありません。これをデバッグするには、コマンドに次を追加-printします。find

find . -name "*.jar" -print -exec ...

これにより、コマンドfindを実行する前にファイルの名前が出力されますsh

説明:

  • find .: 現在のディレクトリ内のすべてのファイルとフォルダーを検索します
  • -name "*.jar"で終わる名前.jar
  • -execそれぞれに対して次のコマンドを実行します
  • sh -c新しいシェルを作成して実行...
  • jar -tf {}JAR アーカイブをテストします。これは(また)アーカイブ内のファイルのリストを出力し、見つかったアーカイブのパスに find置き換えます{}
  • |jar -tfの結果を ... にパイプします。
  • grep入力を検索して...
  • -H各一致のファイル名を出力します
  • --label {}stdin から読み取っているので、ファイル名として (再び find に置き換えられます) を grep使用する必要があります{}
  • GenericClassLoaderの出力でこの文字列を検索しますjar -tf
于 2013-05-03T10:06:22.340 に答える