Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux 如何让find根据对每个文件运行管道的结果打印文件列表?_Linux_Command Line_Find - Fatal编程技术网

Linux 如何让find根据对每个文件运行管道的结果打印文件列表?

Linux 如何让find根据对每个文件运行管道的结果打印文件列表?,linux,command-line,find,Linux,Command Line,Find,我知道我们可以使用find-exec…指定要在每个文件上运行的命令,并仅输出命令成功执行的文件,例如find-执行测试-d{}-打印将打印出所有目录。我想给-exec一个管道,让find返回管道最后一个命令返回true的文件 具体来说,我希望在每个文件上运行jar-t,并grep输出类名。我尝试了查找-名称\*jar-execjar-tf{}\| grep-qfoo \-打印,但它会返回所有文件。我如何更改它?只有当find使用子shell时,使用命令管道作为-exec的参数才有效。但find只

我知道我们可以使用
find-exec…
指定要在每个文件上运行的命令,并仅输出命令成功执行的文件,例如
find-执行测试-d{}-打印
将打印出所有目录。我想给
-exec
一个管道,让
find
返回管道最后一个命令返回true的文件


具体来说,我希望在每个文件上运行
jar-t
,并
grep
输出类名。我尝试了
查找-名称\*jar-execjar-tf{}\| grep-qfoo \-打印
,但它会返回所有文件。我如何更改它?

只有当find使用子shell时,使用命令管道作为
-exec
的参数才有效。但find只执行一个带有exec()函数调用的命令和所有后续标记直到
将作为命令参数传递

因此,当需要漂亮的shell功能时,您必须自己调用subshell:

 $ find . -name '*.jar' -exec sh -c 'jar -tf {} | grep -q foo' \; -print