这个函数不打印任何东西;
skyrimse_testroot() {
local directory="$1"
find "$directory" \
\( -type f -ipath "${directory}/data/scripts/*.pex" \) -o \
\( -type d -ipath "${directory}/data/meshes" \) \
-print -quit
}
但这个确实如此(我删除了第二个测试组);
skyrimse_testroot() {
local directory="$1"
find "$directory" \
\( -type f -ipath "${directory}/data/scripts/*.pex" \) \
-print -quit
}
$1
是绝对路径,起点和-ipath
参数也是绝对路径。
根据我对布尔逻辑的浅薄了解,将更多 OR 子句链接到正表达式不应使该表达式得出负值。要么find
是坏了,要么是我出了什么问题,我怀疑比前者更多的一个选择。
答案1
我不会说破坏,但find
测试中的优先级可能非常令人惊讶,尤其是涉及操作的方式。
从https://manpages.debian.org/stable/findutils/find.1.en.html
无缺陷
运算符优先级令人惊讶
该命令
find . -name afile -o -name bfile -print
永远不会打印 一份文件因为这实际上相当于find . -name afile -o \( -name bfile -a -print \)
.请记住, 的优先级-a
高于 的优先级-o
,并且当测试之间没有指定运算符时,-a
假定为。
因此,在您的示例中,当前的括号不是必需的,因为“and”具有更高的优先级,但您必须在所有测试周围添加它们。
find "$directory" \
'(' \
-type f -ipath "${directory}/data/scripts/*.pex" \
-o \
-type d -ipath "${directory}/data/meshes" \
')' \
-print -quit