如何将组合命令传递给“find -exec”?

Blu*_*zee 6 bash find

什么是有效的语法来组合命令传递到find-exec选择?


例子:

find . -type f -name "*.txt" -exec grep FirstKeyWord {} | grep SecondKeyWord \;
Run Code Online (Sandbox Code Playgroud)

失败并显示以下错误消息:

find: grep: missing argument to `-exec`
;: No such file or directory
Run Code Online (Sandbox Code Playgroud)

使用&&;代替组合命令时,也会出现相同类型的故障|。我什至尝试用 ' 或 $() 或 {} 等引用组合命令,但它(悲惨地)失败了。

注意:我正在寻找一种单行解决方案,而不使用自定义脚本。

Eri*_*ric 10

您可以通过在 exec 参数中显式调用 shell 来使用复杂的 shell 命令。

find . -type f -name "*.txt" -exec sh -c 'grep FirstKeyWord "$1" | grep SecondKeyWord' -- {} \;
Run Code Online (Sandbox Code Playgroud)

sh使用为每个文件提供的命令列表执行,在$1.

编辑:OP 指出这有效并且更简单:

find . -type f -name "*.txt" -exec sh -c 'grep FirstKeyWord {} | grep SecondKeyWord' \;
Run Code Online (Sandbox Code Playgroud)