使用“find ... -exec grep -L”后exec无法正常工作

时间:2015-04-21 14:41:17

标签: unix grep find exec

我可以像这样使用exec链:

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。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

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

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

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

我相信使用-not -exec grep -L ... \;会做你想做的事情,但我必须考虑更多,以确保。

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