Почему обратная косая черта и точка с запятой требуются с опцией -exec команды find?

Я начал комбинировать разные команды в терминале Linux. Мне интересно, почему обратная косая черта и точка с запятой требуются для такой команды, как:

find ./ -name 'blabla' -exec cp {} ./test \;

когда простая команда cp просто:

cp randomfile ./test

без \;

Они должны четко указывать конец команды или это просто требуется в документации? Каков основной принцип?


person wesk    schedule 03.01.2014    source источник
comment
; сам по себе завершит команду. При использовании \; литерал ; передается в качестве параметра find.   -  person Linuxios    schedule 04.01.2014


Ответы (2)


Используется обратная косая черта перед точкой с запятой, поскольку ; является одним из операторов списка (или &&, ||) для разделения команд оболочки. В примере:

command1; command2

Утилита find использует ; или + для завершения команд оболочки, вызванных -exec.

Таким образом, чтобы избежать интерпретации специальных символов оболочки, их необходимо экранировать обратной косой чертой, чтобы удалить любое особое значение для следующего прочитанного символа и для продолжения строки.

Поэтому для команды find допустим следующий пример синтаксиса:

find . -exec echo {} \;
find . -exec echo {} ';'
find . -exec echo {} ";"
find . -exec echo {} \+
find . -exec echo {} +

Смотрите также:

person kenorb    schedule 18.10.2014
comment
Спасибо за перечисление альтернатив. - person marcovtwout; 25.11.2014

из "мужской находки":

Все следующие аргументы для поиска считаются аргументами команды до тех пор, пока аргумент, состоящий из ';' встречается.

find должен знать, когда завершаются аргументы exec. Естественно завершать команду оболочки с помощью ; потому что и оболочка использует этот символ. По той же причине такой символ необходимо экранировать при вставке через оболочку.

person Emanuele Paolini    schedule 03.01.2014