0

シェルの下で実行

find . -name "*.jar" -exec jar -tf {} \;|grep  "message_track.properties"
message_track.properties
message_track.properties

2 つの同じファイルがありますが、どの 2 つの jar にファイルが含まれていますか。それを見つける方法は?

4

2 に答える 2

2

ファイル名が出力されるように追加-printしてから、次を使用します。findegrep

$ find . -name "*.jar" -print -exec jar -tf {} \;|egrep  "jar$|message_track.properties"

./foo.jar
./bar.jar
message_track.properties
./baz.jar
message_track.properties

これは、ファイルが含まれていることbar.jarを示してbaz.jarいます。

grepこのファイルが各jarで1回だけ発生すると仮定すると、これを別の にパイプすることもできます。

$ find . -name "*.jar" -print -exec jar -tf {} \;|egrep  "jar$|message_track.properties" | grep -B1 message_track.properties

./bar.jar
message_track.properties
./baz.jar
message_track.properties

船外に行きたい場合はawk、次のように使用することもできます。

$ find . -name "*.jar" -print -exec jar -tf {} \; | awk '{if($1~/jar$/)jar=$1;else if($1~/message_track/)arr[jar]=$1;}END{for(i in arr){print i " contains " arr[i]}}'

./bar.jar contains message_track.properties
./baz.jar contains message_track.properties
于 2013-09-12T14:42:57.263 に答える
1

これを行うさらに別の方法:

find . -name "*.jar" -exec unzip -l {} \;|grep -E "Archive:|message_track.properties"
于 2013-09-12T16:42:19.153 に答える