如何使用find命令查找哪个jar包含特殊文件

时间:2013-09-12 14:07:32

标签: java shell

执行下面的shell

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

它有两个相同的文件,但是哪两个jar包含该文件。 怎么找到它?

2 个答案:

答案 0 :(得分:2)

-print添加到find,以便打印出文件名,然后使用egrep

$ 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.jarbaz.jar包含该文件。

你甚至可以通过另一个grep来管道这个,假设这个文件只在每个jar中出现一次:

$ 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

答案 1 :(得分:1)

另一种方法:

find . -name "*.jar" -exec unzip -l {} \;|grep -E "Archive:|message_track.properties"