As of the latest version of findutils (commit e6e2d10a, Mon 2023-10-02),
the man and info documentation both incorrectly state that {} needs
to be escaped.
In the info documentation, section 3.3.1:
It replaces the string '{}' by the current file name being processed
everywhere it occurs in the command. Both of these constructions need
to be escaped (with a '\') or quoted to protect them from expansion
by the shell.
("Both" refers to ';' and '{}'.)
In the man page, under "-exec command ;":
The string `{}' is replaced by the current file name being processed
everywhere it occurs in the arguments to the command, not just in
arguments where it is alone, as in some versions of find. Both of
these constructions might need to be escaped (with a `\') or quoted
to protect them from expansion by the shell.
In the man page, under "-exec command {} +":
Only one instance of `{}' is allowed within the command, and it must
appear at the end, immediately before the `+'; it needs to be escaped
(with a `\') or quoted to protect it from interpretation by the shell.
In the man page, under "-execdir command {} +":
As with -exec, the {} should be quoted if find is being invoked from
a shell.
In all the shells I've tried, {} does *not* need to be escaped.
For example, in bash { is treated as a keyword, and is treated
specially only in a context where it's expected. In other contexts,
it's just an ordinary string.
I've confirmed that `/bin/echo {}` prints `{}` with no diagnostic in
csh, tcsh, bash, ksh, dash, zsh, busybox sh, and fish.
(Escaping it unnecessarily is harmless, so this doesn't cause any
real problems other than encouraging a little extra typing.)