当我使用
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt"
它找到所有类型的文件。但是当我-exec
在最后添加时:
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt" -exec sh -c 'echo "$0"' {} \;
它似乎只打印.txt
文件。我究竟做错了什么?
注意:使用 MINGW (Git Bash)
见下面的例子:
$ ls -1p
appledir/
applefile
orangedir/
orangefile
$ find . -type f -name apple\*
./applefile
$ find . -type f -name orange\*
./orangefile
$ find . -type f -name apple\* -o -name orange\*
./applefile
./orangedir
./orangefile
$ find . -type f \( -name apple\* -o -name orange\* \)
./applefile
./orangefile
$
Run Code Online (Sandbox Code Playgroud)
我惊讶地发现我需要括号才能按预期工作;显然,我还没有内化find
评估其论点的优先规则。
我如何轻松预测何时需要以及何时不需要使用括号来明确地对find
初选进行分组?
换句话说,我可以想象在给它的命令中find
插入括号的规则是什么,这将使我能够准确预测它将如何评估未分组的表达式?
find ×2