Isto é do manual para o GNU find
:
-exec command ;
Execute command; true if 0 status is returned.
All following arguments to find are taken to
be arguments to the command until an argument
consisting of ';'
Cortado por mim. Mas também temos:
-exec command {} +
This variant of the -exec action runs the
specified command on the selected files, but
the command line is built by appending each
selected file name at the end; the total num‐
ber of invocations of the command will be much
less than the number of matched files. The
command line is built in much the same way
that xargs builds its command lines.
Cortado por mim.
Portanto, ;
e +
fazem coisas diferentes. Um pequeno exemplo em código para demonstrar:
$ mkdir test
$ touch test/{a,b}
$ find test -exec echo foo {} \;
foo test
foo test/a
foo test/b
$ find test -exec echo foo {} +
foo test test/a test/b
+
gera apenas uma única chamada com todos os arquivos correspondentes dados como uma lista de argumentos (na prática, ela se comporta como xargs
). ;
executa o comando uma vez para cada arquivo correspondente (o ;
precisa ser salvo no shell; daí o \
precedente).
Note que algumas versões do find
não possuem a opção +
, mas a versão GNU provavelmente está instalada em qualquer coisa que não seja o Linux.