在shell下执行
find . -name "*.jar" -exec jar -tf {} \;|grep "message_track.properties"
message_track.properties
message_track.properties
它有两个相同的文件,但其中两个 jar 包含该文件。如何找到它?
添加-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.jar
并baz.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
另一种方法:
find . -name "*.jar" -exec unzip -l {} \;|grep -E "Archive:|message_track.properties"