【问题标题】:Is there a shell command to recursively give permission to directories and files?是否有一个 shell 命令可以递归地授予目录和文件的权限?
【发布时间】:2010-10-12 07:30:21
【问题描述】:

谁能给我一个递归命令,它将遍历一个目录并使所有普通文件的权限为 644 和所有子目录的权限为 755?

每次我必须在主机上安装某些东西时,我真的厌倦了手动执行此操作。我不知道足够的 BASH(Shell?)命令来执行此操作。

【问题讨论】:

    标签: bash shell command-line


    【解决方案1】:

    第一行更改文件权限,第二行更改活动目录及其子目录中的目录权限。

    find . -type f -print0 | xargs -0 chmod 644
    find . -type d -print0 | xargs -0 chmod 755
    

    【讨论】:

    • 或者至少在 -print0-0 业务之前。人们总是建议这样做,我知道为什么,但这让我很恼火。
    • 太棒了,工作就像一种享受。你为我节省了时间和无聊的文字!! :P
    【解决方案2】:

    有 X 选项。

    chmod a+X * -R
    

    这将只为目录提供执行位,而不是文件。要使用一个命令分别设置 644、755,请使用:

    chmod a=rX,u+w <files/dirs> -R
    

    【讨论】:

      【解决方案3】:

      使用符号模式名称而不是原始数字权限:

      chmod -R u=rwX,go=rX somedir
      

      X 权限标志仅将目录或已经可执行的文件设置为可执行文件,-R 标志表示“递归”并将权限应用于somedir 的所有内容。

      【讨论】:

        【解决方案4】:

        不,没有递归更改权限的命令。如果有这样的命令,那就违背了 Unix 的口号:Do One Thing And Do It Well。

        但是,有两个命令:一个用于递归(find),一个用于更改权限(chmod)。

        所以,神奇的命令行是:

        find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +
        

        【讨论】:

        • 怎么了?你有没有try那个命令?它适用于我工作的每一台机器,它符合 POSIX,它符合 Single Unix 规范。与所有其他依赖非标准专有扩展的答案不同,这些扩展在许多平台上都不可用......
        • 错误:说“没有命令”,因为在 GNU 系统上,有。 OP 要求“Bash”,它也是 GNU。然而,我主要担心的是,您在间接称他们错误的同时没有提及其他人。解释 POSIX 问题会更有帮助,以便 OP 了解它如何影响他。
        • 使用 find 和 chmod 比使用 find、管道输出到 xargs 然后使用 chmod 更好。 Jörg W Mittag 的答案确实比公认的答案更好。
        猜你喜欢
        • 2016-10-16
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 2021-03-16
        • 2015-12-14
        • 2015-07-12
        • 2011-04-19
        • 1970-01-01
        相关资源
        最近更新 更多