0

我找到了一个旧的单行 shell 脚本:

 find ./../ -name "*.sh" -exec chmod +x \{\} \;

我了解它授予对父目录下目录中所有 shell 脚本的执行权限。但是,我以前没有见过语法\{\} \;

我猜反斜杠会将字符转义为 yield {} ;,但这意味着什么,为什么它会起作用?

4

1 回答 1

1

\{\}表示替换已匹配对象的完整路径名。

\;标记要执行的命令的参数的结束。

所以

-exec chmod +x \{\} \;

表示为匹配前面过滤chmod +x <pathname>的每个运行。在这种情况下,这将是所有后缀为.<pathname>find.sh

您可以在该命令-execman条目中了解更多信息。find

反斜杠是必需的,因为字符{,}并且;都对 shell 具有语法意义。所以你必须告诉它它们是要传递给find命令的文字字符。

引用该模式"*.sh"的原因相同:阻止 shell 本身进行路径名扩展。

于 2020-10-17T10:28:45.553 回答