Por que encontrar -exec mv {} ./target/ + não funciona?

Eu quero saber exatamente o que{} \; e{} \+ e| xargs ... Faz. Esclareça-os com explicações.

Abaixo 3 comandos executam e produzem o mesmo resultado, mas o primeiro comando demora um pouco e o formato também é um pouco diferent

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

É porque o primeiro executa ofile para cada arquivo proveniente dofind comando. Então, basicamente, é executado como:

file file1.txt
file file2.txt

Mas depois, 2 encontre com-execs comandos @ executam o comando file uma vez para todos os arquivos como abaixo:

file file1.txt file2.txt

Então eu executo os seguintes comandos nos quais o primeiro é executado sem problemas, mas o segundo gera uma mensagem de err

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

Para o comando com{} \+, dá-me a mensagem de erro

find: missing argument to `-exec'

por que é que? alguém pode explicar o que estou fazendo de errado?

questionAnswers(4)

yourAnswerToTheQuestion