What does -prune option in find do?

后端 未结 1 521
情歌与酒
情歌与酒 2020-12-16 05:06

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 n

相关标签:
1条回答
  • 2020-12-16 06:06

    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, -print is performed on all files for which the expression is true. [my emphasis]

    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.

    0 讨论(0)
提交回复
热议问题