-exec ... \; executará um item após o outro. Então, se você tiver três arquivos, a linha exec será executada três vezes.
-exec ... {} + é para comandos que podem levar mais de um arquivo por vez (por exemplo, cat , stat , ls ). Os arquivos encontrados por find são encadeados como um comando xargs . Isso significa menos bifurcação e, para pequenas operações, pode significar uma aceleração substancial.
Aqui está uma demonstração de desempenho com 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 só funciona em comandos que podem receber vários nomes de arquivos. Você pode descobrir se seu comando é assim, olhando para a sua página de manual. Aqui está a sinopse de man cat :
SYNOPSIS
cat [OPTION]... [FILE]...
As reticências em [FILE]... significam que pode demorar 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.