在 mac 中使用 shell 命令递归更改文件和文件夹的权限

问题描述 投票:0回答:5

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

找到“/Users/Test/Desktop/PATH”-exec

  • chmod 777 {};

我如何在 Mac 上执行相同的操作,因为我反复收到以下错误?

查找:TEST_FILE:没有这样的文件或 目录

macos shell permissions
5个回答
56
投票

问题是

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

此外,您应该使用习惯用法

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

最后,

chmod
可以使用
-R
标志自行进行递归更改,因此除非您需要搜索特定文件,否则只需执行以下操作:

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

48
投票

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

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

18
投票

通过使用 CHMOD 是的:

对于递归文件:

chmod -R 777 foldername or pathname

对于非递归:

chmod 777 foldername or pathname

9
投票

我没有 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")

1
投票

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

在MAC中 然后转到文件夹获取信息打开存储和权限更改为权限读取写入

© www.soinside.com 2019 - 2024. All rights reserved.