2

I found the following very useful command on this site:

find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;

But I don't understand what the {} \; means, can anyone explain?

Thanks

Guy Goodrick
  • 53
  • 1
  • 7

3 Answers3

2

Placeholders in find.

{} denotes 'whatever you found'.

; means end of statement. The \ lets find see it, without the shell interpolating it.

It's often considered sensible to use '{}' (e.g. with single quotes) because the shell will interpolate {}.

Sobrique
  • 52,974
  • 7
  • 60
  • 101
2
-execdir bzgrep "pattern" {} \;
  ^      ^        ^       ^  ^^
  |      |        |       |  ||
  |      |        |       |  |end of the execdir flag
  |      |        |       |  |
  |      |        |       |  shell escape
  |      |        |       |
  |      |        |       2. argument to bzgrep
  |      |        |       {} is substituted with the current filename
  |      |       1. argument to bzgrep
  |      |
  |    the command to run
execute a command 

i.e. for each file that find finds, it runs bzgrep where {} is substituted with the file name.

The ; is needed to end the -execdir, so you can e.g. have other flags to the find command after it. the \ is used to escape the ;, since a ; on the shell would otherwise be interpreted as a command separator (as in e.g. the oneline cd /etc ; ls -l). Single quoting the ; would also work, ';' instead of \; - at least in bash.

Or as the manpage sayes:

-exec command ;

Execute command; All following arguments to find are taken to be arguments to the command until an argument consisting of ‘;’ is encountered. The string ‘{}’ is replaced by the current file name being processed

Community
  • 1
  • 1
nos
  • 223,662
  • 58
  • 417
  • 506
1

{} is the filename find found ant to substituted in the exec(dir) command.
\; is end of command given after execdir. You need the backslash, since it is not used to show the end of the complete unix command (find).

Walter A
  • 19,067
  • 2
  • 23
  • 43