Вопрос

С помощью этого набора команд, что такое {} и \; символы для?

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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top