如何更改某些文件模式/扩展名的权限?

Posted

技术标签:

【中文标题】如何更改某些文件模式/扩展名的权限?【英文标题】:How to change permissions to certain file pattern/extension? 【发布时间】:2011-05-14 02:06:26 【问题描述】:

使用chmod,我在当前目录中执行chmod +x *.sh,但是如果我想更改所有文件,包括具有 sh 文件扩展名的子文件夹中的文件,该怎么办?

chmod +x -R * 可以,但我需要更像chmod +x -R *.sh 的东西

【问题讨论】:

【参考方案1】:

使用查找:

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

【讨论】:

命令行很难记住或记住,我必须经常访问这个页面才能看到语法。你有办法记住这个命令吗? 我不记得很多命令了。所以,我构建了接受参数的脚本。 对于那些对命令实际在做什么感到困惑的人,请参阅下面的 chappjc 的回答,以获得提示,至少。【参考方案2】:

尝试使用 find 与 xargs 的完美组合。

find . -iname \*.sh -print0 | xargs -r0 chmod +x

. 是启动的目录,在本例中是工作目录。

【讨论】:

或者您可以在简单的情况下使用 -exec,如 ennukiller 的示例。 xargs 对于更复杂的用途来说功能稍强。 这比 find ... -exec ... 见en.wikipedia.org/wiki/Xargs @Nathan 感谢您指出这一重要区别。读到这篇文章,我发现了一种新的find 语法,它可以两全其美(有关详细信息,请参阅my answer)。【参考方案3】:

使用现代版本的find,您可以获得xargs 方法的好处,该方法可以避免多次调用命令 (chmod)。命令只是略有不同。

find . -name "*.sh" -exec chmod +x <strong>+</strong>

在 Arch 2015.09.01 上从 find docs 截取(强调由我添加):

-exec command +

-exec 操作的这个变体对选定的文件运行指定的命令,但是命令行是通过在末尾附加每个选定的文件名来构建的;该命令的总调用次数将远少于匹配文件的数量。命令行的构建方式与xargs 构建其命令行的方式非常相似。命令中只允许有一个 实例。该命令在起始目录中执行。

【讨论】:

以上是关于如何更改某些文件模式/扩展名的权限?的主要内容,如果未能解决你的问题,请参考以下文章

文件权限之(介绍,更改,扩展)

使用 shell 脚本更改文件的扩展名

Spotify Web API - 登录后如何扩展权限范围?

使用脚本扩展 HTML 文件并覆盖/扩展某些部分标签

如何在 JSON 模式中扩展模式?

如何在 Mac OS X 中删除文件的“扩展属性”?