使用 "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 代码是有意义的,因为当输出文件名时没有找到匹配的行,当文件名没有输出时找到匹配的行。
我可以使用这样的执行链:
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 代码是有意义的,因为当输出文件名时没有找到匹配的行,当文件名没有输出时找到匹配的行。