`find` 返回值:find 手册页是否错误?

`find` 返回值:find 手册页是否错误?

手册find页说:

-execdir command {} +始终返回 true,而 -execdir command {} ; 仅当命令返回 0 时才返回 true。

退出状态 如果所有文件均已成功处理,find 将以状态 0 退出;如果发生错误,则状态大于 0。

但如果我测试这个,我会得到相反的行为:

 $ find . -execdir false '{}' \; ; echo $?      
 0

 $ find . -execdir false '{}' \+ ; echo $?      
 1

有人可以解释一下吗?

-exec代替-execdir我得到相同的结果。我尝试过find (GNU findutils) 4.6.0并且4.4.2

答案1

此“返回”不是 的退出代码,而是用于将多个操作链接在一起的操作find的返回值。如果你试试:-execdirfind

find . -execdir false '{}' \; -print

then-print永远不会执行(即没有输出),而两者:

find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print

打印每条路径。


但是,当使用+退出代码时find set:如果命令的任何调用非零退出,则它为非零,而对于 a 来说,;退出代码不受命令结果(直接)影响。这种行为POSIX 要求对于-exec,我想指出否则无法检测到的故障:

如果主表达式由 a 标点<plus-sign>,则主表达式应始终评估为 true,并且评估主表达式的路径名应聚合到集合中。 [...]如果任何调用返回非零值作为退出状态,则 find 实用程序应返回非零退出状态

-exec ... \;未指定为影响退出代码,因此find除非出现错误,否则默认行为为退出零。-exec ... \;非零退出的命令不被视为错误,因此在没有其他错误的情况下,退出代码将始终为零。

相关内容