【问题标题】:changing permission for files and folder recursively using shell command in mac在mac中使用shell命令递归更改文件和文件夹的权限
【发布时间】:2011-04-19 13:41:30
【问题描述】:

在Linux中我们可以使用下面的命令递归地改变文件和文件夹的权限模式。

找到“/Users/Test/Desktop/PATH”-exec * chmod 777 {} \;

我怎么能对 mac 做同样的事情,因为我反复收到以下错误。

发现:TEST_FILE:没有这样的文件或 目录

【问题讨论】:

    标签: macos shell permissions


    【解决方案1】:

    问题是 * 正在被您的 shell 解释并扩展为一个名为 TEST_FILE 的文件,该文件恰好位于您当前的工作目录中,因此您告诉 find 执行名为TEST_FILE 不存在。我不确定你想用 * 完成什么,你应该删除它。

    此外,您应该使用成语-exec program '{}' \+ 而不是-exec program '{}' \;,这样find 就不会为每个文件派生一个新进程。使用;,为每个文件派生一个新进程,而使用+,它只派生一个进程并在一个命令行上传递所有文件,这对于像chmod 这样的简单程序来说效率更高。

    最后,chmod 可以使用-R 标志自行进行递归更改,因此除非您需要搜索特定文件,否则只需这样做:

    chmod -R 777 /Users/Test/Desktop/PATH
    

    【讨论】:

      【解决方案2】:

      您可以只使用 -R(递归)标志。

      chmod -R 777 /Users/Test/Desktop/PATH
      

      【讨论】:

        【解决方案3】:

        通过使用 CHMOD 是:

        对于递归文件:

        chmod -R 777 foldername or pathname
        

        对于非递归:

        chmod 777 foldername or pathname
        

        【讨论】:

        • 如果mac报错操作不允许,用sudo执行
        【解决方案4】:

        我没有 Mac OSx 机器来测试它,但在 Linux 上的 bash 中,我使用类似以下内容来对目录进行 chmod:

        find . -type d -exec chmod 755 {} \+
        

        但这也做同样的事情:

        chmod 755 `find . -type d`
        

        这也是如此:

        chmod 755 $(find . -type d)
        

        最后两个使用不同形式的子命令。第一个是使用反引号(旧的和折旧的),另一个是 $() 子命令语法。

        所以我认为在你的情况下,以下将做你想要的。

        chmod 777 $(find "/Users/Test/Desktop/PATH")
        

        【讨论】:

        • 我认为这是一个更好的答案,因为在大多数情况下,文件和目录不会具有相同的权限。但我认为'。参考是危险的——如果你在错误的目录中,你很容易把事情搞砸。如果参数列表太长,答案 2 和 3 也不起作用。
        【解决方案5】:

        如果他们给出路径目录错误!

        在 MAC 中 然后转到文件夹 Get InfoOpen Storage and Permission 更改为 privileges Read To Write

        【讨论】:

          猜你喜欢
          • 2012-08-26
          • 2018-01-06
          • 1970-01-01
          • 2013-12-06
          • 2012-09-25
          • 1970-01-01
          • 1970-01-01
          • 2020-10-30
          • 1970-01-01
          相关资源
          最近更新 更多