Это из руководства для 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 `;'
Отключи меня. Но у нас также есть:
-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.
Отключи меня.
;
и +
делать разные вещи. Краткий пример кода для демонстрации:
$ 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
+
генерирует только один вызов со всеми соответствующими файлами, представленными в виде списка аргументов (на практике он ведет себя как xargs
). ;
выполняет команду один раз для каждого файла соответствия ;
должно быть экранированы в оболочке, поэтому предыдущий \
Обратите внимание, что в некоторых версиях find
отсутствует опция +
, но версия GNU, скорее всего, установлена на любом не встроенном Linux.