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
Consider the following script:
#!/bin/sh
set -x
find `pwd` -name "file.ext" -exec echo $(dirname {}) \;
set -x
shows how the expansion works and what the final command is. When run, it gives the following output:
++ pwd
++ dirname '{}'
+ find /home/kibab -name file.ext -exec echo . ';'
So, the first thing that is expanded is the pwd
. Second is $(dirname {})
. The result of those two commands is then dropped into the find command. Thus, you're telling find to -exec echo .
, so you're seeing the expected output.
When you substitute basename
for dirname
, the expansion still takes places, but the results of the expansion are different:
pwd
is expanded to the current path. In my example above, the result is /home/kibab
basename {}
is executed. The result of this command is {}
.
The find command is executed with the above substitutions in place. The final command executed looks like this:
find /home/kibab -name '*.png' -exec echo '{}' ';'
Upon inspecting the above command, you'll notice that the command now simply echo's whatever file was found.
Perhaps you want something like this?
find `pwd` -name "file.ext" -printf "%f\n"