"find: missing argument to `-exec'" when using "-exec rm -f {}\"

Solution 1:

You missed the a ; at the end (and a space too between {} and ;). The correct command is:

find . -type f -name "IMAG1806.jpg" -exec rm -f {} \;

; indicates the end of -exec predicate of find.

Also note that we have used \; i.e. \ in front of ; to escape the interpretation of ; by shell, otherwise shell will treat ; as end of the whole find command and find will throw the same error. You can also use ';' instead of \;.

You were using \ at the end, this indicates your shell will continue to take input via PS2 (indicated by >), you typed IMAG1806.jpg again, so the whole command becomes:

find . -type f -name "IMAG1806.jpg" -exec rm -f {}IMAG1806.jpg

As you can see this is not a valid command at all with IMAG1806.jpg at the end, no closing of -exec predicate and without a space between {} and \;.

Solution 2:

You can simply

find . -type f -name 'IMAGE1806.jpg' -delete

From the man page:

Delete files; true if removal succeeded.  If the removal failed,
an  error message is issued.  If -delete fails, find's exit sta‐
tus will be nonzero (when it eventually exits).  Use of  -delete
automatically turns on the -depth option.