Від man find
:
-exec команда;
Виконати команду; вірно, якщо статус 0 повернуто. Усі наступні аргументи для пошуку вважаються аргументами команди, поки аргумент не складається з ';' зустрічається. Рядок '{}' замінюється поточним ім'ям файлу, яке обробляється скрізь, де воно трапляється в аргументах команди, а не тільки в аргументах, де він один, як у деяких версіях знаходження. Обидві ці конструкції, можливо, знадобиться уникнути (з позначкою '\') або цитувати їх, щоб захистити їх від розширення оболонкою. Див. Розділ ПРИКЛАДИ для прикладів використання параметра '-exec'. Зазначена команда виконується один раз для кожного відповідного файлу.
Команда виконується в початковому каталозі. Існують неминучі проблеми із безпекою щодо використання опції -exec;
команда -exec {} +
Цей варіант параметра -exec виконує вказану команду для вибраних файлів, але командний рядок будується додаванням кожного вибраного імені файлу в кінці ; загальна кількість викликів команди буде значно меншою, ніж кількість відповідних файлів. Командний рядок побудований приблизно так само, як xargs будує свої командні рядки. У команді дозволений лише один екземпляр "{}". Команда виконується в початковому каталозі.
Отже, як я це розумію, \;
виконує окрему команду для кожного знайденого файлу find
, тоді як \+
додає файли та виконує одну команду над усіма ними. Характер \
втечі, так що:
ls testdir1; ls testdir2
проти
ls testdir1 testdir2
Виконання сказаного в моїй оболонці відображає результат у вашому запитанні.
приклад, коли ви хочете використовувати \+
Припустимо, два файли 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
):
find *.tmp -exec diff {} \+
1c1,3
< 1
---
> 0
> 2
> 30
Так що в цьому випадку різниця між diff 1.tmp; diff 2.tmp
іdiff 1.tmp 2.tmp
Бувають випадки, коли \;
це доречно і \+
буде необхідно. Використання \+
з rm
одним із таких випадків, коли, якщо ви видаляєте велику кількість файлів, продуктивність (швидкість) буде кращою \;
.