я нашел следующую очень полезную команду на этом сайте:Что {} ; значит
find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;
Но я не понимаю, что {} \; означает, может кто-нибудь объяснить?
Благодаря
я нашел следующую очень полезную команду на этом сайте:Что {} ; значит
find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;
Но я не понимаю, что {} \; означает, может кто-нибудь объяснить?
Благодаря
PLACEHOLDERS в find
.
{}
обозначает «все, что вы нашли».
;
означает конец заявления. \
позволяет find
видеть его, без оболочки, интерполирующей его.
Это часто считается разумным использовать '{}'
(например, одинарные кавычки), так как оболочка будет интерполировать {}
.
Что вы подразумеваете под 'shell будет интерполировать {}'? Какая «оболочка»? – BroSlow
Без кавычек имя файла с пробелом специального символа может сделать что-то странное. – Sobrique
Кавычки будут обработаны до 'find'. Единственное, что могло бы иметь значение, было бы, если бы какая-то оболочка считала, что '{}' означает что-то особенное (в этом случае '' '' вероятно сохранит литерал '{}'), но я не знаю никого, что делаю. – BroSlow
{} - это имя файла, найденного в файле exec (dir).
\; это конец команды, указанный после execdir. Вам нужна обратная косая черта, поскольку она не используется для отображения конца всей команды unix (find).
-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 команды;
Выполнение команды; Все следующие аргументы для поиска берутся в как аргументы команды до тех пор, пока не будет найден аргумент, состоящий из ';'. Строка '{}' заменяется на текущее имя файла, обрабатываемое
Возможный дубликат [Простая команда unix, что такое {} и \; for] (http://stackoverflow.com/questions/447048/simple-unix-command-what-is-the-and-for) – BroSlow