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

时间:2013-05-01 17:48:35

标签: linux bash ubuntu find gnu

当我使用

find . -type f -path ./source/script -prune -o -print;

我在“pruned”./ source / script目录中获取文件。

...
./source/script
./source/script/myapp02.4372d2ea3388.js
./source/script/myapp02.js
./source/script/myapp02.1798d7bc34d2.js
...

但是当我使用时:

find . -path ./source/script -prune -o -type f -print;

省略了“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

another example中,我看到了:

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print

我与我的唯一区别是-type d位于我的代码-type f中。

这是忽略-prune并且查找程序在“修剪”目录内搜索的唯一原因吗?

1 个答案:

答案 0 :(得分:4)

find . -type f -path ./source/script -prune -o -print;

被解释为

find . (-type f AND -path ./source/script AND -prune) OR (-print);

find . -path ./source/script -prune -o -type f -print;

被解释为

find . (-path ./source/script AND -prune) OR (-type f AND -print);

请注意,-print-prune是评估为 true 的表达式。

因此,如果(-path ./source/script AND -prune) 为真,则不会评估(-type f AND -print)并且不会调用-print。并且`(-path ./source/script AND -prune)适用于./source/script

的所有文件和子目录