2015-03-05 4 views
1

я нашел следующую очень полезную команду на этом сайте:Что {} ; значит

find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \; 

Но я не понимаю, что {} \; означает, может кто-нибудь объяснить?

Благодаря

+0

Возможный дубликат [Простая команда unix, что такое {} и \; for] (http://stackoverflow.com/questions/447048/simple-unix-command-what-is-the-and-for) – BroSlow

ответ

0

PLACEHOLDERS в find.

{} обозначает «все, что вы нашли».

; означает конец заявления. \ позволяет find видеть его, без оболочки, интерполирующей его.

Это часто считается разумным использовать '{}' (например, одинарные кавычки), так как оболочка будет интерполировать {}.

+0

Что вы подразумеваете под 'shell будет интерполировать {}'? Какая «оболочка»? – BroSlow

+0

Без кавычек имя файла с пробелом специального символа может сделать что-то странное. – Sobrique

+0

Кавычки будут обработаны до 'find'. Единственное, что могло бы иметь значение, было бы, если бы какая-то оболочка считала, что '{}' означает что-то особенное (в этом случае '' '' вероятно сохранит литерал '{}'), но я не знаю никого, что делаю. – BroSlow

0

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

0
-execdir bzgrep "pattern" {} \; 
^ ^ ^ ^^^ 
    |  |  |  | || 
    |  |  |  | |end of the execdir flag 
    |  |  |  | | 
    |  |  |  | shell escape 
    |  |  |  | 
    |  |  |  2. argument to bzgrep 
    |  |  |  {} is substituted with the current filename 
    |  |  1. argument to bzgrep 
    |  | 
    | the command to run 
execute a command 

т.е. для каждого файла, find находками, он работает bzgrep где {} заменяется на имя файла.

; необходим для завершения работы -execdir, так что вы можете, например. после него есть другие флаги команды find. \ используется для выхода из ;, так как ; на оболочке иначе интерпретируется как разделитель команд (как, например, oneline cd /etc ; ls -l). Одиночное цитирование; также будет работать, ';' вместо \; - по крайней мере, в bash.

Или как Manpage sayes:

-exec команды;

Выполнение команды; Все следующие аргументы для поиска берутся в как аргументы команды до тех пор, пока не будет найден аргумент, состоящий из ';'. Строка '{}' заменяется на текущее имя файла, обрабатываемое