【问题标题】: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 的东西

【问题讨论】:

    标签: linux bash unix file-permissions chmod


    【解决方案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 构建其命令行的方式非常相似。命令中只允许有一个{} 实例。该命令在起始目录中执行。

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2016-09-02
      相关资源
      最近更新 更多