如何更改某些文件模式/扩展名的权限?
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
构建其命令行的方式非常相似。命令中只允许有一个实例。该命令在起始目录中执行。
【讨论】:
以上是关于如何更改某些文件模式/扩展名的权限?的主要内容,如果未能解决你的问题,请参考以下文章