【发布时间】:2015-03-05 09:59:03
【问题描述】:
我在这个网站上发现了以下非常有用的命令:
find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;
但我不明白 {} \; 是什么意思是,谁能解释一下?
谢谢
【问题讨论】:
标签: find
我在这个网站上发现了以下非常有用的命令:
find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;
但我不明白 {} \; 是什么意思是,谁能解释一下?
谢谢
【问题讨论】:
标签: find
find 中的占位符。
{} 表示“无论你找到什么”。
; 表示语句结束。 \ 让 find 看到它,而不需要 shell 对其进行插值。
通常认为使用'{}'(例如,使用单引号)是明智的,因为shell 将插入{}。
【讨论】:
the shell will interpolate {} 是什么意思?哪个shell?
find 之前得到处理。唯一重要的方法是,如果某个 shell 认为 {} 意味着特殊的东西(在这种情况下,'' 可能会保留文字 {}),但我不知道有什么这样做。
{} 是 find 找到的要在 exec(dir) 命令中替换的文件名。
\;是在 execdir 之后给出的命令结束。您需要反斜杠,因为它不用于显示完整的 unix 命令(查找)的结尾。
【讨论】:
-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 命令。 \ 用于转义;,因为shell 上的; 否则会被解释为命令分隔符(例如单行cd /etc ; ls -l)。单引号;也可以使用';' 而不是\; - 至少在 bash 中。
或者正如手册页所说:
-执行命令;
执行命令;以下所有要查找的参数都被带到 成为命令的参数 直到遇到由“;”组成的参数。字符串 “{}”替换为当前正在处理的文件名
【讨论】: