【问题标题】:chmod - replicate user permissions to group/worldchmod - 将用户权限复制到组/世界
【发布时间】:2017-05-06 01:07:09
【问题描述】:

我需要使某些文件夹/文件(递归)具有与用户相同的权限。所以:

  • 0755 -> 0777
  • 0644 -> 0666

我该怎么做?也许是我知道的一个小秘密命令?

如果没有简单的方法,那么也许我需要创建一个循环并测试/分配。最终我只需要处理 3 种类型:

文件夹应为 777,大多数文件应为 666,可执行文件应为 777。

【问题讨论】:

    标签: bash chmod


    【解决方案1】:

    没有适合你的命令。你确实需要一个小循环:

    for file in $(find . -print)
    do
      if [ -d $file -o -x $file ]; then
        chmod 777 $file
      else
        chmod 666 $file
      fi
    done
    

    【讨论】:

    • 这是非常非常错误的。看看带有空格或通配符的文件名会发生什么。另外,通过shellcheck.net 运行它并修复引用问题。
    • ...关于for file in $(find . -print)的一般做法,请参见BashPitfalls #1DontReadLinesWithFor
    • ...如果您希望能够在您的 shell 脚本中安全且正确地处理来自 find 的任意文件名,您需要使用 -exec 操作将它们传递给您的脚本argv 或 -print0 生成 NUL 分隔的流。在 BashFAQ #1 中搜索 -print0 以获取后者的示例,或在 UsingFind 的“复杂操作”部分中搜索两者。
    • 另外,[ ] 中的 -o 已弃用。请参阅the POSIX standard for test,并注意-a-o 规范中的[OB](“过时”)符号。
    【解决方案2】:

    find 可以查找具有给定权限集的文件,并运行尽可能少的 chmod 调用来覆盖它们。

    find . \
      '(' -perm -0700 -exec chmod 0777 '{}' + ')' -o \
      '(' -perm -0600 -exec chmod 0666 '{}' + ')'
    

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 2013-06-26
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多