Unix exec在使用“后不工作”;找到-执行官格雷普-L“;
我可以使用这样的exec链: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 谢谢
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
匹配的文件?我要复制所有文件而不复制