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