使用 "find ... -exec grep -L" 后 exec 不工作

exec not working after using "find ... -exec grep -L"

我可以使用这样的执行链:

find -name 'file' -exec grep -l 'content' '{}' \; -exec cp '{}' '{}'_copy \;

但是使用 grep -L 选项(L 表示没有匹配的文件),第二个 exec 没有被执行。为什么?

find -name 'file' -exec grep -L 'conXent' '{}' \; -exec cp '{}' '{}'_copy \;

两个命令都检索同一个文件。但是 "exec cp" 仅适用于 grep -l .

感谢您的帮助!

问题是 grep -L 出于某种原因正在退出 return 代码 1。我无法解释为什么要这样做。我的理解是它不应该这样做,因为正在输出行。

在任何情况下,退出状态都会导致 -exec 评估为 false 并导致 find 停止处理文件(与任何其他失败测试相同)。

+ 不会发生这种情况,因为当 find 一次给出 grep 多个文件时,至少有一个文件与这些内容匹配,因此 grep 以零退出return 代码(但这里显然不可靠)。我也无法解释这种行为,这对我来说也完全是倒退。

我相信使用 -not -exec grep -L ... \; 会做你想做的事,但我必须多考虑一下才能确定。

嗯...我想 return 代码是有意义的,因为当输出文件名时没有找到匹配的行,当文件名没有输出时找到匹配的行。