от мужчины
-exec команда;
Выполнить команду; true, если возвращается 0 статус. Все следующие
аргументы для поиска принимаются в качестве аргументов команды до
аргумент, состоящий из ';' встречается. Строка '{}'
заменяется текущим именем файла, обрабатываемым везде
это происходит в аргументах команды, а не только в аргументах
где он один, как в некоторых версиях найти. Обе эти
конструкции, возможно, должны быть экранированы (с '\') или заключены в кавычки
защитить их от расширения оболочкой. Смотрите ПРИМЕРЫ
Примеры использования опции '-exec'. Специфика
Команда fied запускается один раз для каждого соответствующего файла. Команда
выполняется в начальном каталоге. Есть неизбежные
проблемы безопасности, связанные с использованием опции -exec; вы
вместо этого следует использовать параметр -execdir.
-exec команда {} +
Этот вариант опции -exec запускает указанную команду на
выбранные файлы, но командная строка строится путем добавления
каждое выбранное имя файла в конце; общее количество инвока-
количество команд будет намного меньше числа
совпавшие файлы. Командная строка построена во многом таким же образом
что xargs строит свои командные строки. Только один экземпляр '{}'
разрешено в команде. Команда выполнена в
начальный каталог.
так, как я понимаю, \; выполняет отдельные команды и + добавляет каждое имя. это в основном так, как он выполняется, так как \ это побег, так что
ls testdir1; ls testdir2
против
ls testdir1 testdir2
выполнение вышеизложенного в моей оболочке отражало вывод вашего вопроса.
ОБНОВЛЕНИЕ 2
Итак, почему вы хотите использовать +
скажем, у меня есть два файла 1.tmp и 2.tmp
1.tmp
1
2
3
2.tmp
0
2
3
работает
find *.tmp -exec diff {} \;
> diff: missing operand after `1.tmp'
> diff: Try `diff --help' for more information.
> diff: missing operand after `2.tmp'
> diff: Try `diff --help' for more information.
где, если вы используете + и объединяете результаты поиска следующим образом:
find *.tmp -exec diff {} \+
1c1,3
< 1
---
> 0
> 2
> 30
так что в этом случае разница между diff 1.tmp; diff 2.tmp и diff 1.tmp 2.tmp
Есть случаи, когда \; уместно и + будет необходимо. использование + с rm является одним из таких случаев, когда при удалении большого количества файлов скорость значительно улучшается; Мне всегда нравится больше узнавать о find, это такая мощная и удобная утилита, я надеюсь, что этого достаточно для объяснения различий.