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



我发现了一个旧的单行shell脚本:

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

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

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

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

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

所以

-exec chmod +x {} ;

表示对与前面find筛选匹配的每个<pathname>运行chmod +x <pathname>。 在这种情况下,这将是所有带有后缀的文件.sh.

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

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

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

最新更新