【问题标题】:What does {} \; mean{} \; 是什么意思?意思是
【发布时间】:2015-03-05 09:59:03
【问题描述】:

我在这个网站上发现了以下非常有用的命令:

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

但我不明白 {} \; 是什么意思是,谁能解释一下?

谢谢

【问题讨论】:

标签: find


【解决方案1】:

find 中的占位符。

{} 表示“无论你找到什么”。

; 表示语句结束。 \find 看到它,而不需要 shell 对其进行插值。

通常认为使用'{}'(例如,使用单引号)是明智的,因为shell 插入{}

【讨论】:

  • the shell will interpolate {} 是什么意思?哪个shell
  • 没有引号,带有特殊字符空格的文件名可能会做一些奇怪的事情。
  • 报价将在find 之前得到处理。唯一重要的方法是,如果某个 shell 认为 {} 意味着特殊的东西(在这种情况下,'' 可能会保留文字 {}),但我不知道有什么这样做。
【解决方案2】:

{} 是 find 找到的要在 exec(dir) 命令中替换的文件名。
\;是在 execdir 之后给出的命令结束。您需要反斜杠,因为它不用于显示完整的 unix 命令(查找)的结尾。

【讨论】:

    【解决方案3】:
    -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 中。

    或者正如手册页所说:

    -执行命令;

    执行命令;以下所有要查找的参数都被带到 成为命令的参数 直到遇到由“;”组成的参数。字符串 “{}”替换为当前正在处理的文件名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-09
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      相关资源
      最近更新 更多