我发现了一个旧的单行shell脚本:
find ./../ -name "*.sh" -exec chmod +x {} ;
我知道它授予对父目录下目录中所有 shell 脚本的执行权限。但是,我以前没有看到语法{} ;
。
我猜反斜杠会转义字符以产生{} ;
,但这是什么意思,为什么它有效?
{}
表示替换已匹配对象的完整路径名。
;
标记要执行的命令的参数的结束。
所以
-exec chmod +x {} ;
表示对与前面find
筛选匹配的每个<pathname>
运行chmod +x <pathname>
。 在这种情况下,这将是所有带有后缀的文件.sh
.
您可以在find
命令的man
条目中阅读有关-exec
的更多信息。
反斜杠是必需的,因为字符{
、}
和;
对 shell 都具有语法意义。 因此,您必须告诉它它们是要传递给find
命令的文字字符。
引用模式"*.sh"
的原因相同:阻止 shell 本身执行路径名扩展。