Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix exec在使用“后不工作”;找到-执行官格雷普-L“;_Unix_Grep_Find_Exec - Fatal编程技术网

Unix exec在使用“后不工作”;找到-执行官格雷普-L“;

Unix exec在使用“后不工作”;找到-执行官格雷普-L“;,unix,grep,find,exec,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 \; 两个命令都检索相同的文件。但是“execcp”只适用于grep-l 谢谢

我可以使用这样的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 \;
两个命令都检索相同的文件。但是“execcp”只适用于grep-l


谢谢你的帮助

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

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

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

我相信使用
-not-exec grep-L…\
会做你想做的事,但我必须多想一想才能确定


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

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

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

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

我相信使用
-not-exec grep-L…\
会做你想做的事,但我必须多想一想才能确定


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

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

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

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

我相信使用
-not-exec grep-L…\
会做你想做的事,但我必须多想一想才能确定


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

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

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

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

我相信使用
-not-exec grep-L…\
会做你想做的事,但我必须多想一想才能确定


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

所以您想对所有不包含
conXent
的文件做些什么?是的。但是为什么它不能与grep-L一起工作呢?在使用exec cpOH之前,输出是相同的!它使用“+”而不是“\;”,像这样:find-name'file'-exec grep-L'conXent'{}+-exec cp'{}'{}'{}'\u copy\;但是为什么呢?从
人查找
-->
-exec命令-->
对于每个匹配的文件,指定的命令运行一次。
。但仍然不清楚,您是要复制所有文件还是仅复制通过
-L
匹配的文件?我要复制所有文件而不使用“conXent”,因此所有文件都是使用find grep-L输出的。请参阅我之前的评论,它使用“+”。因此您要对所有不包含
conXent
的文件执行某些操作?是的。但是为什么它不能与grep-L一起工作呢?在使用exec cpOH之前,输出是相同的!它使用“+”而不是“\;”,像这样:find-name'file'-exec grep-L'conXent'{}+-exec cp'{}'{}'{}'\u copy\;但是为什么呢?从
人查找
-->
-exec命令-->
对于每个匹配的文件,指定的命令运行一次。
。但仍然不清楚,是要复制所有文件还是仅复制通过
-L
匹配的文件?我要复制所有文件而不复制