在Mac中使用Shell命令递归地更改文件和文件夹的权限

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

find "/Users/Test/Desktop/PATH" -exec * chmod 777 {} \;

我如何在Mac上执行相同的操作,因为我一遍又一遍地收到以下错误。

find: TEST_FILE: 没有那个文件或目录

5个回答

51
问题在于 shell 解释了 * 并将其扩展为一个名为 TEST_FILE 的文件,该文件恰好位于您当前的工作目录中,因此您要告诉 find 执行名为 TEST_FILE 的命令,但实际上并不存在这样的命令。我不确定您尝试使用 * 做什么,您应该将其删除。

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

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

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

44

你可以直接使用 -R(递归)标志。

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

17

通过使用CHMOD命令:

对于递归文件:

chmod -R 777 foldername or pathname

对于非递归:

chmod 777 foldername or pathname

1
如果Mac提示“操作不允许”,请使用sudo执行。 - Parama Dharmika

8

我没有一台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
我认为这是一个更好的答案,因为在大多数情况下,文件和目录不会有相同的权限。但是,我认为“.”引用是危险的——如果你在错误的目录中,你很容易搞砸事情。此外,如果参数列表太长,答案2和3也无法工作。 - mrtnmgs

1

如果他们遇到路径目录错误!

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接