Все последующие аргументы для findпринимаются в качестве аргументов команды.
Строка {}заменяется текущим именем обрабатываемого файла.
using +выполнит наименьшее количество возможных команд (так как аргументы объединены вместе). Это очень похоже на то, как xargsработает команда, поэтому она будет использовать как можно больше аргументов для каждой команды, чтобы избежать превышения максимального лимита аргументов в строке.
Там является разница и главный. См. User1116056 ответ
Джахид
24
Учитывая, что команда find попадает ниже трех файлов:
fileA
fileB
fileC
Если вы используете -execсо +знаком плюс ( ),
find . -type f -exec chmod 775 {} +
это будет:
chmod 775 fileA fileB fileC
Командная строка создается путем добавления каждого совпадающего имени файла в конце, что аналогично xargsпостроению его командных строк. Общее количество вызовов команды ( chmodв данном случае) будет намного меньше, чем количество подходящих файлов.
-exec command {} + Этот вариант действия -exec запускает указанную команду для выбранных файлов, но командная строка создается путем добавления каждого выбранного имени файла в конце; общее количество вызовов команды будет намного меньше, чем количество совпавших файлов. Командная строка строится почти так же, как xargs создает свои командные строки. В команде допускается только один экземпляр «{}». Команда выполняется в начальном каталоге.
man find(1)
очень подробно, и его легко найти любому. Не ленись.man exec
!{} +
использованием раньше. Я обычно использую xargs для этого (и частоfind ... -print0 | xargs -0 ...
)Ответы:
Использование
;
(точка с запятой) или+
(знак плюс) обязательно для завершения команд оболочки, вызванных-exec
/execdir
.Разница между
;
(точка с запятой) или+
(знак плюс) заключается в том, как аргументы передаются в параметр find-exec
/-execdir
. Например:Использование
;
будет выполнять несколько команд (отдельно для каждого аргумента),Пример:
using
+
выполнит наименьшее количество возможных команд (так как аргументы объединены вместе). Это очень похоже на то, какxargs
работает команда, поэтому она будет использовать как можно больше аргументов для каждой команды, чтобы избежать превышения максимального лимита аргументов в строке.Пример:
Смотрите также:
man find
источник
Учитывая, что команда find попадает ниже трех файлов:
Если вы используете
-exec
со+
знаком плюс ( ),это будет:
Командная строка создается путем добавления каждого совпадающего имени файла в конце, что аналогично
xargs
построению его командных строк. Общее количество вызовов команды (chmod
в данном случае) будет намного меньше, чем количество подходящих файлов.Если вы используете
-exec
с точкой с запятой (;
),это будет:
источник
Согласно
man find
:источник