spring
私はその名前を含むすべての瓶を見つけようとしています。私はWindowsを使用しており、cygwinを使用してLinuxコマンドを実行しています。以下のコマンドが正しいと思いますか?
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
何らかの理由でまだ処理中であり、結果はまだ画面に表示されません。特定の名前のjarファイルをすばやく見つける方法はありますか?
たとえば、以下はspringを含む有効なjarファイルです。
spring-web.jar
spring-core.jar
test-spring.jar
答え1
jar
私はこのコマンドがパラメータを介して複数の.jar
ファイルを受け入れるとは思わないので、私が知っている限り、一度の呼び出しでファイルをすべてjar
処理する.jar
ことは不可能です。find
ファイルごとに1回のexec呼び出しを防止して作業を高速化する1つのオプション.jar
は次のとおりです。
find . -name '*.jar' -exec sh -c \
'for f; do jar -tf "$f" | grep --label="$f" "spring"; done' sh {} +
答え2
次のコマンドは、部分文字列を含むjarファイルを探しますspring
。
find /some/dir -type f -name "*spring*.jar"
元のコマンドは、周囲のテキストや例とは異なる内容を調べます。
find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;
見つけてくださいこれGillesは、上記のコマンドが探しているコマンドのチャットの説明ではない理由を説明しています。
テスト
[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
出力:
[root@keithpc jar_check]# find ./ -type f -name "*spring*.jar"
./no_sss_spring.jar
./1spring.jar
./spring1.jar
ご覧のとおり、ファイルspring.txt
は返されません。私はこれがあなたが探しているものだと思います。
今コマンドが何をしているのか理解するには
- まず、.javaというファイルを作成しました
springtest
。 - 次に、ファイルに
class
コマンドを実行してファイルを作成します。java
java
- jarコマンドを実行してjarファイルに追加しました。
コマンドを実行すると、
class
jarファイルの代わりに探しているファイルが返されます。[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