`find <path> -name "*.sh" -exec chmod +x \{\} \; 是如何工作的?

How does `find <path> -name "*.sh" -exec chmod +x \{\} \;` work?

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

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

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

我猜反斜杠转义字符会产生 {} ;,但这是什么意思,为什么它起作用?

\{\}表示替换匹配到的对象的全路径

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

所以

-exec chmod +x \{\} \;

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

的文件

您可以在 find 命令的 man 条目中阅读有关 -exec 的更多信息。

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

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