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