Простая команда unix, что такое {} и \; за - PullRequest
14 голосов
/ 15 января 2009

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

find . -name '*.clj' -exec grep -r resources {} \;

Ответы [ 5 ]

27 голосов
/ 15 января 2009

См. человек найти . (в частности, часть о -exec)

При использовании -exec для запуска команды для каждого из найденных файлов, {} заменяется именем каждого найденного файла, и команда заканчивается на \;

В вашем примере все файлы, найденные в текущем каталоге (.), соответствующие имени *.clj, будут запускать команду grep -r resources (найти строку resources, если она существует в каждом из эти файлы).

На самом деле это несколько избыточно, поскольку -r предназначен для рекурсивного поиска в подкаталогах, и это то, что find уже делает.

2 голосов
/ 16 января 2009

Рассмотрим эту альтернативную команду, которую мне легче понять:

find . -name *.clj | xargs grep -r resources 
2 голосов
/ 15 января 2009

В find, параметр -exec захватывает остальные параметры до; (точка с запятой), который должен быть экранирован, поэтому \ ;. В этом интервале {} заменяется проверяемым именем файла.

1 голос
/ 15 января 2009

Строка символов "{}" будет заменена текущим обрабатываемым файлом. Экранированная точка с запятой завершает аргумент команды для опции -exec.

0 голосов
/ 18 октября 2014

Строка {} в find заменяется путем к текущему файлу.

Точка с запятой используется для завершения команды оболочки, вызванной утилитой find.

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

См. Также: Почему обратная косая черта и точка с запятой требуются при использовании команды find -exec?

...