如何正确使用李子?-type d 和 -type f 对修剪有不同的影响?

Jen*_*nov 5 linux bash ubuntu gnu find

当我使用

find . -type f -path ./source/script -prune -o -print;
Run Code Online (Sandbox Code Playgroud)

我在“修剪过的” ./source/script 目录中获取文件。

...
./source/script
./source/script/myapp02.4372d2ea3388.js
./source/script/myapp02.js
./source/script/myapp02.1798d7bc34d2.js
...
Run Code Online (Sandbox Code Playgroud)

但是当我使用:

find . -path ./source/script -prune -o -type f -print;
Run Code Online (Sandbox Code Playgroud)

“pruned”目录中的文件被省略:

./generate.py
./readme.txt
./source/class/myapp02/Application.js
./source/class/myapp02/Application.js:75:      
./source/class/myapp02/__init__.js
./source/class/myapp02/Application.js~
./source/class/myapp02/theme/Font.js
./source/class/myapp02/theme/Theme.js
./source/class/myapp02/theme/Decoration.js
./source/class/myapp02/theme/Color.js
./source/class/myapp02/theme/Appearance.js
./source/class/myapp02/simulation/DemoSimulation.js
./source/class/myapp02/test/DemoTest.js
./source/translation/readme.txt
./source/index.html
./source/index.html~
./source/resource/myapp02/test.png
./Manifest.json
./config.json
Run Code Online (Sandbox Code Playgroud)

另一个例子中,我看到:

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print
Run Code Online (Sandbox Code Playgroud)

我看到的与我的唯一区别-type d是在我的代码中-type f

-prune是被忽略和查找程序在“修剪”目录中搜索的唯一原因吗?

rzy*_*mek 4

find . -type f -path ./source/script -prune -o -print;
Run Code Online (Sandbox Code Playgroud)

被解释为

find . (-type f AND -path ./source/script AND -prune) OR (-print);
Run Code Online (Sandbox Code Playgroud)
find . -path ./source/script -prune -o -type f -print;
Run Code Online (Sandbox Code Playgroud)

被解释为

find . (-path ./source/script AND -prune) OR (-type f AND -print);
Run Code Online (Sandbox Code Playgroud)

请注意,-print和是计算结果为true 的-prune表达式。

因此,如果(-path ./source/script AND -prune)true,则(-type f AND -print)不会评估也-print不会调用。`(-path ./source/script AND -prune)对于所有文件和子目录都是如此./source/script