Respostas:
-exec ... \;executará um item após o outro. Portanto, se você tiver três arquivos, a linha exec será executada três vezes.
-exec ... {} +é para os comandos que podem levar mais de um arquivo ao mesmo tempo (por exemplo cat, stat, ls). Os arquivos encontrados por findsão encadeados como um xargscomando. Isso significa menos bifurcação e para pequenas operações, pode significar uma aceleração substancial.
Aqui está uma demonstração de desempenho, gerando 10.000 arquivos vazios.
$ mkdir testdir
$ touch testdir/{0000..9999}
$ time find testdir/ -type f -exec cat {} \;
real 0m8.622s
user 0m0.452s
sys 0m8.288s
$ time find testdir/ -type f -exec cat {} +
real 0m0.052s
user 0m0.015s
sys 0m0.037s
Novamente, isso funciona apenas em comandos que podem receber vários nomes de arquivos. Você pode descobrir se seu comando é assim, olhando para a página de manual. Aqui está a sinopse de man cat:
SYNOPSIS
cat [OPTION]... [FILE]...
As reticências ativadas [FILE]...significam que pode levar mais de um arquivo.
+só pode ser usado em comandos únicos e você deve ter exatamente um {}na linha. \;pode operar com vários grupos de zero a muitos.
+não é POSIX, portanto, pode não estar disponível em sistemas não Linux. Não é uma preocupação se você nunca sai da plataforma, mas é bom saber se você precisa usar o Solaris. :)
-exec <command> {} ';'porque é mais fácil digitar (posso tocar no tipo, mas não tenho exatamente a melhor técnica).
-exec ... {} +é POSIX. Veja: pubs.opengroup.org/onlinepubs/9699919799/utilities/…
-exec ... {} +extensão foi sugerida para inclusão nas especificações do POSIX em 2001 e ratificada na edição 6 do POSIX em 2004. É possível que a versão do Solaris com a qual você esteja acostumado seja mais antiga que o padrão do POSIX (ou apenas tenha como alvo uma versão anterior).
\;, o comando executado seriacat 1; cat 2; cat 3. Com+, o comando executado seriacat 1 2 3.