Why are the backslash and semicolon required with the find command's -exec option?
The backslash before the semicolon is used, because ;
is one of list operators (or &&
, ||
) for separating shell commands. In example:
command1; command2
The find
utility is using ;
or +
to terminate the shell commands invoked by -exec
.
So to avoid special shell characters from interpretation, they need to be escaped with a backslash to remove any special meaning for the next character read and for line continuation.
Therefore the following example syntax is allowed for find
command:
find . -exec echo {} \;
find . -exec echo {} ';'
find . -exec echo {} ";"
find . -exec echo {} \+
find . -exec echo {} +
See also:
- Using semicolon (;) vs plus (+) with exec in find
- Simple unix command, what is the {} and \; for
from "man find":
All following arguments to find are taken to be arguments to the command until an argument consisting of ';' is encountered.
find needs to know when the arguments of exec are terminated. It is natural to terminate a shell command with ; because also the shell uses this character. For the very same reason such a character must be escaped when inserted through the shell.