Why using dirname in find command gives dots for each match?

前端 未结 7 1477
清酒与你
清酒与你 2021-02-01 15:16

I\'m using find for a task and I noticed that when I do something like this:

find `pwd` -name \"file.ext\" -exec echo $(dirname {}) \\;

it will

7条回答
  •  星月不相逢
    2021-02-01 15:26

    $(dirname {}) is evaluated by the shell before being passed to find. The result of this evaluation is ., so you're just telling find to execute echo . for each file it finds.

    basename {} evaluates to {}, so with $(basename {}) substituted for $(dirname {}), find will execute echo {} for each file. This results in the full name of each file being echoed.

    If you want to output the result of dirname for each file found, you can omit the echo:

    find `pwd` -name "file.ext" -exec dirname {} \;
    

提交回复
热议问题