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


13

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

Ответы:


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

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

4

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

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

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


1
человек это очень ... кратко? Я считаю, что ему не хватает глубины и ясности.
ксенотеррацид

Идея состоит не в том, чтобы слепо порождать один процесс для каждого файла, а в том, чтобы собрать вместе имена файлов и вызывать команду меньше раз. Пример: вместо создания 3 разных процессов «rm FILENAME», он собирает имена файлов и выполняет «rm FILE1 FILE2 FILE3».
танте

В некоторых версиях xargs IIRC есть возможность пакетировать эти имена до определенного предела, поэтому вы можете извлечь из этого пользу, но также избежать переполнения, когда у вас большой список.
Кевин Канту

(«Найти сам по себе - это страшный маленький язык сам по себе!»)
Кевин Канту

findдает мне полу
Мэтт Александр
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.