Reputation: 12064
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
Upvotes: 8
Views: 27520
Reputation: 8623
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.
Upvotes: 11