Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用find命令查找包含特殊文件的jar_Java_Shell - Fatal编程技术网

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

Java 如何使用find命令查找包含特殊文件的jar,java,shell,Java,Shell,shell下的exec 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 {} \;

shell下的exec

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

-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"

还有另一种方法:

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

在IDE中搜索它,例如eclipse。如果使用第三个库jar,您无法使用ideyoucan找到。把它放到cp,c-shift-r,写文件名,然后你就会看到。(Eclipse)在IDE中搜索它,例如Eclipse。如果使用第三个库jar,您无法使用ideyoucan找到。把它放到cp,c-shift-r,写文件名,然后你就会看到。(Eclipse)这意味着,如果文件名包含
message\u track
。如果需要,可以将其更改为
message\u track.properties
。这意味着,如果文件名包含
message\u track
。如果需要,可以将其更改为
message\u track.properties