Для структуры команды -exec command {} \; Я получил информацию в man find .

  1. {} означает selected files .
  2. ; означает опровергнуть аргумент.
  3. \; сбежал, чтобы защитить их от расширения оболочкой.

В абзаце, связанном с -exec command {} + .

 -exec command {} +
              This  variant  of the -exec action runs the specified command on
              the selected files, but the command line is built  by  appending
              each  selected file name at the end; the total number of invoca‐
              tions of the command will  be  much  less  than  the  number  of
              matched  files.   The command line is built in much the same way
              that xargs builds its command lines.  Only one instance of  `{}'
              is  allowed  within the command, and (when find is being invoked
              from a shell) it should be quoted (for example, '{}') to protect
              it  from  interpretation  by shells.  The command is executed in
              the starting directory.  If any invocation  returns  a  non-zero
              value  as exit status, then find returns a non-zero exit status.
              If find encounters an error, this can sometimes cause an immedi‐
              ate  exit, so some pending commands may not be run at all.  This
              variant of -exec always returns true.

Он никогда ничего не говорит о + , что означает + в команде bash -exec command {} +?
Это означает прекратить аргумент, такой как ;?
+ означает плюс, например 3+5=8 или concatenate , чтобы объединить две строки в одну, такую как s1 + s2 .
Странно, что назначение значения terminate the argument для + .

1 ответ1

1

Это не имеет ничего общего с Bash, это часть синтаксиса find . Команда должна знать, где заканчивается действие -exec . Это заканчивается в ; или на + . В зависимости от завершающего символа используется правильный вариант действия -exec .

Почему эти два персонажа были выбраны для этой цели? Я не знаю. Некоторый способ закончить выражение -exec был необходим, и кто-то выбрал ; и + . Теперь символы являются частью стандарта POSIX, когда дело доходит до команды find .

Мы можем только догадываться об этом ; был выбран, потому что он также может завершить команду в оболочке, поэтому цель аналогична. По этой причине, ; то, что должно быть видно по find , должно обрабатываться специально в оболочке, следовательно, \; (';' или ";" также работает). Там нет такой проблемы с + .

Технически почти любая другая строка могла бы быть выбрана вместо + (то же самое с ;). Обратите внимание, что -exec , {} , + и ; (после прохождения оболочки благодаря экранированию или цитированию), возможные тесты или действия, такие как -type или -print - все они являются аргументами для find ; они становятся значимыми, когда процесс find их, их смысл исходит из того, как была изобретена find .

Подвести итоги:

  1. Речь идет о find , а не о bash .
  2. Инструмент поддерживает два слегка отличающихся действия -exec .
  3. Чтобы разделить их, мы используем два разных аргумента, которые завершают оператор -exec ; это выбор дизайна.
  4. Эти две разные ; и + ; это выбор дизайна.
  5. Эти выборы могли быть сделаны по-другому. Даже если за + стоит история (которую я не знаю), это пустяки, а не что-то действительно значимое. Я могу только предположить, что {} + означает "один аргумент или более", например, 10+ иногда означает "десять или более".

Более широкое понимание

+ означает плюс, например 3+5=8 или concatenate , чтобы объединить две строки в одну, такую как s1+s2 . Странно, что назначение значения завершает аргумент для + .

Как насчет

> означает «больше, чем»… Странно назначать значение "перенаправление" для > .

« + означает плюс» не от Бога. Кто-то решил, другие последовали, и символ застрял.

  • Кто-то решил + означает "плюс" в математике.
  • Кто-то решил > означает «больше, чем» в математике.
  • Кто-то решил > перенаправить в оболочку.
  • Кто-то решил + завершает -exec в контексте find .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .