Что команда + in find / path / -exec '{}' + делает?

13

Что +в find /path/ -exec command '{}' +делах? в отличие отfind /path/ -exec command '{}' \;

xenoterracide
источник

Ответы:

17

'+' Делает одну большую командную строку из всех найденных файлов, чтобы минимизировать количество команд, которые нужно выполнить.

Учитывая случай, когда команда find находит четыре файла.

find . -type f -exec command '{}' \;

будет производить

command file1
command file2
command file3
command file4 

С другой стороны

find . -type f -exec command '{}' \+

производит

command file1 file2 file3 file4
ddeimeke
источник
3
Если вы знаете xargs, -exec … {} +делает то же самое -print | xargs …, но без проблем с цитированием ( -print0 | xargs -0это еще один способ, но он менее переносим).
Жиль "ТАК - перестань быть злым"
4

Со страницы руководства:

-exec команда {} +

Этот вариант действия -exec запускает указанную команду для выбранных файлов, но командная строка создается путем добавления каждого выбранного имени файла в конце; общее количество вызовов команды будет намного меньше, чем количество совпавших файлов. Командная строка строится во многом так же, как xargs создает свои командные строки. В команде допускается только один экземпляр `{} '. Команда выполняется в начальном каталоге.

Tante
источник
1
человек это очень ... кратко? Я считаю, что ему не хватает глубины и ясности.
ксенотеррацид
Идея состоит не в том, чтобы слепо порождать один процесс для каждого файла, а в том, чтобы собрать вместе имена файлов и вызывать команду меньше раз. Пример: вместо создания 3 разных процессов «rm FILENAME», он собирает имена файлов и выполняет «rm FILE1 FILE2 FILE3».
танте
В некоторых версиях xargs IIRC есть возможность пакетировать эти имена до определенного предела, поэтому вы можете извлечь из этого пользу, но также избежать переполнения, когда у вас большой список.
Кевин Канту
(«Найти сам по себе - это страшный маленький язык сам по себе!»)
Кевин Канту
findдает мне полу
Мэтт Александр