关于unix:使用“ find…-exec grep -L”后,exec无法正常工作

exec not working after using “find … -exec grep -L”

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

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

但是使用grep -L选项(对于不匹配的文件为L),则不执行第二个exec。 为什么呢

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

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

谢谢你的帮助!


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

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

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

我相信使用-not -exec grep -L ... \;可以满足您的要求,但是我不得不再想一想。

嗯...我想返回码很有意义,因为当输出文件名时找不到匹配的行,而当文件名没有输出时找到匹配的行。