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

pyt*_*tho 28 permissions macos shell

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

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

我怎么能为mac做同样的事情,我会得到以下错误的重复.

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

Ada*_*eld 43

问题是*shell正在解释它并且正在扩展到一个名为TEST_FILE恰好位于当前工作目录中的文件,所以你要告诉你find执行命名的命令TEST_FILE,该命令不存在.我不确定你要用它做什么*,你应该删除它.

此外,你应该使用的成语-exec program '{}' \+,而不是-exec program '{}' \;find没有一个新的进程为每个文件.使用时;,会为每个文件分叉一个新进程,而使用+它只会分叉一个进程并在单个命令行上传递所有文件,这对于简单程序chmod来说效率要高得多.

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

chmod -R 777 /Users/Test/Desktop/PATH
Run Code Online (Sandbox Code Playgroud)


And*_*Vit 33

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

chmod -R 777 /Users/Test/Desktop/PATH
Run Code Online (Sandbox Code Playgroud)


Ein*_*zer 9

通过使用CHMOD是:

对于递归文件:

chmod -R 777 foldername or pathname
Run Code Online (Sandbox Code Playgroud)

对于非递归:

chmod 777 foldername or pathname
Run Code Online (Sandbox Code Playgroud)


fre*_*kjh 5

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

find . -type d -exec chmod 755 {} \+
Run Code Online (Sandbox Code Playgroud)

但这也做同样的事情:

chmod 755 `find . -type d`
Run Code Online (Sandbox Code Playgroud)

这样:

chmod 755 $(find . -type d)
Run Code Online (Sandbox Code Playgroud)

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

因此,我认为在您的情况下,以下将满足您的要求。

chmod 777 $(find "/Users/Test/Desktop/PATH")
Run Code Online (Sandbox Code Playgroud)