gpt4 book ai didi

linux - 我如何根据在每个文件上运行管道的结果告诉 find 打印文件列表?

转载 作者:太空狗 更新时间:2023-10-29 11:16:06 26 4
gpt4 key购买 nike

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

具体来说,我想在每个文件上运行 jar -t,然后 grep 输出一个类名。我试过 find 。 -name\*jar -exec jar -tf {}\|grep -q foo\; -print,但它返回所有文件。我该如何改变它?

最佳答案

使用命令管道作为 -exec 的参数只有在 find 使用子 shell 时才有效。但是 find 只是执行 一个 命令,其中包含 exec() 函数调用和 ; 之前的所有后续标记将作为命令参数传递。

因此,当需要漂亮的 shell 功能时,您将不得不自己调用子 shell:

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

关于linux - 我如何根据在每个文件上运行管道的结果告诉 find 打印文件列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7691923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com