Actually, I escaped {} out of habit. If it works on the command line, it will very likely work in a script. Perhaps it works because the {} is empty (if you don't know what { and } do in the shell, try this: echo {f,c,r}at ). In fact, that must be it, because I've used it unescaped with xargs. Thanks, you've taught me something
The important part is escaping the semicolon, because ; on it's own indicates to the shell that a command line is complete, and it is not passed to find. find requires a literal ; to tell it where the end of parameters for -exec are. It would also work if you put the semicolon in quotes, like ";".