¿Por qué find -exec mv {} ./target/ + no funciona?

Quiero saber exactamente qué{} \; y{} \+ y| xargs ... do. Aclare esto con explicaciones.

Abajo los 3 comandos se ejecutan y generan el mismo resultado, pero el primer comando lleva un poco de tiempo y el formato también es un poco diferente.

find . -type f -exec file {} \;
find . -type f -exec file {} \+
find . -type f | xargs file

Es porque el primero ejecuta elfileomando @ para cada archivo proveniente delfind comando. Entonces, básicamente se ejecuta como:

file file1.txt
file file2.txt

Pero los últimos 2 encuentran con-exec comandos ejecutan el comando de archivo una vez para todos los archivos como a continuación:

file file1.txt file2.txt

Entonces ejecuto los siguientes comandos en los cuales el primero se ejecuta sin problemas pero el segundo da un mensaje de error.

find . -type f -iname '*.cpp' -exec mv {} ./test/ \;
find . -type f -iname '*.cpp' -exec mv {} ./test/ \+ #gives error:find: missing argument to `-exec'

Para comando con{} \+, me da el mensaje de error

find: missing argument to `-exec'

¿porqué es eso? ¿Alguien puede explicar qué estoy haciendo mal?

Respuestas a la pregunta(4)

Su respuesta a la pregunta