Простая команда unix, что такое {} и \; за
Вопрос
С помощью этого набора команд, что такое {} и \; символы для?
find . -name '*.clj' -exec grep -r resources {} \;
Решение
См. поиск людей . (в частности, часть о -exec
)
При использовании -exec
для запуска команды для каждого из найденных файлов, {}
заменяется именем каждого найденного файла, и команда прекращается \;
В вашем примере все файлы, найденные в текущем каталоге (.
), соответствующие имени *. clj
, будут иметь команду grep -r resources
запустить их (чтобы найти строку resources
, если она существует в каждом из этих файлов).
На самом деле это несколько избыточно, поскольку -r
предназначен для рекурсивного поиска в подкаталогах, и это то, что find
уже делает. Р>
Другие советы
При поиске параметр -exec захватывает остальные параметры до; (точка с запятой), который должен быть экранирован, поэтому \ ;. В этом интервале {} заменяется проверяемым именем файла.
Рассмотрим эту альтернативную команду, которую я нахожу более легкой для понимания:
find . -name *.clj | xargs grep -r resources
Строка символов " {} " будет заменен текущим обрабатываемым файлом. Экранированная точка с запятой завершает аргумент команды для опции -exec.
Строка {}
в find
заменяется путем к текущему файлу.
Точка с запятой используется для завершения команды оболочки, вызываемой утилитой find
.
Его необходимо экранировать или заключать в кавычки, чтобы он не интерпретировался оболочкой, поскольку ;
- это один из специальных символов, используемых оболочкой (операторы списка).
См. также: Почему обратная косая черта и точка с запятой требуются с помощью опции -exec команды find?