Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to correctly use prune? -type d and -type f have a different effect on prune?

When I use

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

I get files in the "pruned" ./source/script directory.

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

But when I use:

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

the files in the "pruned" directory are omitted:

./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

In another example I see:

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

The only difference I see with mine is that the -type d is in my code -type f.

Is that the only reason why -prune is ignored and the find program searches inside the "pruned" directory?

like image 393
Jenia Ivanov Avatar asked Oct 04 '22 06:10

Jenia Ivanov


1 Answers

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

is interpreted as

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

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

is interpretted as

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

Note that -print and -prune are expressions that evaluate to true.

So if (-path ./source/script AND -prune) is true then (-type f AND -print) is not evaluated and -print is not called. And `(-path ./source/script AND -prune) is true for all the files and subdirectories of ./source/script

like image 158
rzymek Avatar answered Oct 06 '22 20:10

rzymek