I can see the -prune of find
not working correctly. I guess -name "efence*" -prune
option should select (or find) all files except the one with name efence*
right?
Or am i wrong in my understanding?
The command i executed:
find * -maxdepth 0 -name "efence*" -prune
Expectation: Select all files at current directory (maxdepth 0
) except one with name *efence.
Please help me to understand -prune
Try
find * -maxdepth 0 -name "efence*" -prune -o -print
The prune
option does print matching files, if no other options are specified (it still prevents find
from recursing into matching directories, however).
Edited to add explanation:
find
expressions distinguish between tests
and actions
. From man find
:
The expression is made up of options (which affect overall operation rather than the processing of a specific file, and always return true), tests (which return a true or false value), and actions (which have side effects and return a true or false value), all separated by operators.
-and
is assumed where the operator is omitted.If the expression contains no actions other than
-prune
,
So -prune
is an action which has the side effect that find
will not recurse into subdirectories which match the preceding test (in your case, -maxdepth 0 -name "efence*"
). But in terms of the truth-value of the expression, it's equivalent to just having
find * -maxdepth 0 -name "efence*" -true
and since you didn't specify any other action, -print
is assumed (this assumption is always present as it allows you to type e.g. find . -name "*.java"
instead of find . -name "*.java" -print
).
Hope that makes sense. The accepted answer at the other thread talks about the same thing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With