如何测试“find”命令的原色可用性并输出它支持哪些原色?

如何测试“find”命令的原色可用性并输出它支持哪些原色?

我正在编写一个脚本来确定是否find支持以下原色:

  • 正则表达式
  • 时间
  • 阿泰姆
  • 带有 +/- 的 inum

到目前为止,我想出了这个:

find / -mindepth 0 -maxdepth 1 -inum +0 -exec echo "ok:inum+-" \; 2>&1 | head -n 1

仅当该命令能够理解该主节点时,它才应输出“ok:inum+-”。

问题是我依赖 find 来查找匹配项,否则它不会输出任何内容。

理想情况下,测试的主程序不应关心它发现什么,并且应始终执行回显,除非工具因错误而中止。

我意识到我可以放弃-exec echo …并检查调用的退出代码find,但是我将如何根据它打印“ok:”字符串?

哦,任何解决方案都必须是一行每个测试的初级。

答案1

您可以检测 stderr 上是否存在任何内容:

find_supports() {
  [ -z "$(find / -prune "$@" 2>&1 > /dev/null)" ]
}

然后:

if find_supports -inum +0; then...
if find_supports -exit 2; then...
if find_supports -maxdepth 1; then...

请注意,有些谓词find支持,但它们之间的方式不兼容。

例如,默认情况下-regex期望 BSD 中的基本正则表达式,而 GNU期望来自某些古老版本的.findfindemacs

的解释后缀in -mtime/-size也因实现而异。

另外,上面的内容不能用于测试-depth//-delete因为-mindepth它们与-prune.-depth是标准的,并且实现-maxdepth也有-mindepth.

相关内容