With this set of commands, what are the {}
and \;
characters for?
find . -name '*.clj' -exec grep -r resources {} \;
{} means "the output of find ". As in, "whatever find found". find returns the path of the file you're looking for, right? So {} replaces it; it's a placeholder for each file that the find command locates (taken from here).
$ find. Search for a file by the name abc. txt below the current directory, and prompt the user to delete each match. Note that the “{}” string is substituted by the actual file name while running and that the “\;” string is used to terminate the command to be executed.
The find Command It supports searching by file, folder, name, creation date, modification date, owner and permissions.
See man find. (particular the part about -exec
)
When using -exec
to run a command on each of the files found, the {}
is replaced with the name of each file found, and the command is terminated by \;
In your example, all files found under the current directory (.
), matching the name *.clj
will have the command grep -r resources
run on them (to find the string resources
if it exists in each of those files).
It's actually somewhat redundant, since -r
is for recursively searching subdirectories, and that's what find
is already doing.
In find, the -exec parameter grabs the rest of the parameters up til the ; (semicolon) which has to be escaped, hence the \;. Within this span, {} is replaced with the filename being inspected.
Consider this alternative command which I find easier to understand:
find . -name *.clj | xargs grep -r resources
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With