На этот вопрос уже есть ответ:
Что означает
{} \;
строка в bash?
Я видел это пару раз, например, чтобы найти и удалить все файлы по имени, которое нужно execute
find . -name "FILE-TO-FIND" -exec rm -rf {} \;
Что делает эта строка?
Оба {}
и ;
имеют особое значение в bash
, но в контексте find
именно find
фактически интерпретирует эти два (на самом деле мы хотим, чтобы find
интерпретировал эти два).
Прежде всего, -exec
является действием find
. {}
и ;
являются специальными параметрами для предиката -exec
из find
.
Синтаксис для действия -exec
:
-exec command ;
или
-exec command {} +
. Поэтому нам нужно не допустить интерпретации {}
и ;
оболочкой заранее .
В контексте find .... -exec
:
{}
указывает (содержит) результат (ы) из выражения find
, то есть find . -name "FILE-TO-FIND"
в данном случае. Обратите внимание, что пустые фигурные скобки {}
не имеют особого значения для оболочки, поэтому мы можем уйти без экранирования {}
Поскольку bash
рассматривает ;
как конец команды нам нужно избежать этого с помощью \
, то есть \;
, чтобы его можно было проанализировать с помощью -exec
, а не с помощью bash
.