Почему обратная косая черта и точка с запятой требуется с помощью команды find -exec?
Я начал комбинировать разные команды в терминале linux. Мне интересно, почему обратная косая черта и точка с запятой необходимы для команды, например:
find ./ -name 'blabla' -exec cp {} ./test \;
когда простая команда cp просто:
cp randomfile ./test
без \;
Должны ли они четко указывать конец команды или это просто требуется в документации? Каков основной принцип?
Спасибо!
Ответы
Ответ 1
из "man find":
Все следующее аргументы для поиска считаются аргументами команды до тех пор, пока аргумент, состоящий из ';' встречается.
find нужно знать, когда аргументы exec прекращаются. Естественно прекратить команду оболочки с; потому что и оболочка использует этот символ. По той же причине такой символ должен быть экранирован при вставке через оболочку.
Ответ 2
Используется обратная косая черта перед точкой с запятой, поскольку ;
является одним из операторов списка (или &&
, ||
) для разделения команд оболочки. В примере:
command1; command2
Утилита find
использует ;
или +
для завершения команд оболочки, вызванных -exec
.
Таким образом, чтобы избежать специальных интерпретаций оболочки из интерпретатора, они должны быть экранированы с обратной косой чертой, чтобы удалить какой-либо особый смысл для следующего чтения символа и продолжения строки.
Поэтому для команды find
разрешен следующий пример синтаксиса:
find . -exec echo {} \;
find . -exec echo {} ';'
find . -exec echo {} ";"
find . -exec echo {} \+
find . -exec echo {} +
См. также: