广泛支持使用“-exec … +”查找?

广泛支持使用“-exec … +”查找?

判断从GNU findutils 更改日志它必须在 GNU 中存在至少十年(也比它作为 POSIX 的一部分的时间还要长),所以现在可以安全地假设它在所有地方都受到支持吗?

另外,在可以使用的xargs情况下,是否有任何充分的理由来提倡替代? (显然,如果您需要一些特殊参数,例如用于控制最大参数数、并行性等的参数,-exec … +您会使用这些参数)xargs

有趣的引用来自GNU findutil 文档的一部分

[查找与-exec … +]可能比 的某些用途效率低xargs;例如,xargs允许在上一个命令仍在执行的同时构建新的命令行,并允许您指定多个要并行运行的命令。然而,该find ... -exec ... +结构具有广泛的可移植性的优点。 GNU findutils-exec ... +直到版本 4.2.12 才支持 ' '[2005 年 1 月];原因之一是-print0无论如何它已经有了“ ”动作。

答案1

+的变体是-exec在 POSIX 中引入的,PASC 解释 1003.2 #2102001 年,并在第 6 期中与 POSIX 标准合并(如当前标准中所述)find(1)文档)。根据解释,System V Release 4 的所有衍生版本都支持它,HP-UX 也是如此(2001 年 - 我知道 HP-UX 10 不支持它);显然任何符合 POSIX 6 或 7 标准的系统也支持它。

GNU-ism 实际上是find -print0 | xargs -0一组命令。如果-exec ... +可用,但不-0提供支持xargs,那么您最好使用前者;即使如果它支持您的需要,也-0没有理由不使用。-exec ... +

答案2

现在可以安全地假设 [ -exec ...] 在所有地方都受到支持吗?

-exec ... '{}' ';'变体为每个执行的命令提供精确的匹配,现在肯定会在所有地方得到支持,甚至在非 POSIX unix 系统上也是如此。

-exec ... '{}' +体,我不确定。确实,它的定义是POSIX-1,所以当前所有 POSIXy 系统肯定都支持它。但是,我不确定是否所有较旧的 UNIX 系统(仍在使用)都支持它。

-exec ... '{}' +在可以使用[ ] 的情况下,是否有任何充分的理由提倡使用 xargs ?

不,不是真的。既然一个命令就足够了,为什么还要使用两个命令呢?

问题更在于,如果你唯一知道的工具是锤子,那么所有问题看起来都像钉子。的强大之处在于,在执行作用于列表的命令之前,您可以使用 、 、 等操作匹配xargs列表。bashsedawk

(实际上,这要求文件和目录名称中不嵌入换行符。Bash 和 GNU find、sed、awk 和 xargs 都支持 nul 字符\0作为分隔符,因此它们可以操作所有可能的文件名,而无需问题。)

相关内容