我已将另一个驱动器的内容移至我的主目录中,但权限不正确。首先,我通过输入以下内容更改了所有权:
~$ sudo chown -R USERME /home/USERHOME/
我认为现在有效。
但现在,我想简单地将所有文件和子目录更改为默认权限,文件为读+写,目录为r+w+x。我还没有找到处理这个问题的递归方法。我跑了:
~$ sudo chmod 755 -R /home/USERHOME/
让一切都为我所用。但是,文件显示为可执行文件,这不是我想要的。还有更多的子目录和文件,所以我正在寻找一个简单的递归解决方案。
基本上,我认为我正在寻找一种递归方法,通过(我认为)chmod 将默认 umask 参数重新应用到整个文件夹。
更新:
我已经发布了一个解决方案,感谢 @SkyDan 和“更改文件的 chmod,但不更改目录”
答案1
chmod
可以做到,不需要找。
使用符号模式和大写字母X
。
chmod -R u=rwX,og=rX directory
交替进行以避免重复,并且更容易编辑。我们可以让它以行动为导向,而不是以角色为导向。
chmod -R a=rX,u+w directory
大写的 X 告诉 chmod 将 x 应用到目录(如果它已经有它,如果你这样做的话go+X
)。
手动提取:
符号模式的格式为 [ugoa...][[+-=][perms...]...],其中 perms 是集合 rwxXst 中的零个或多个字母,或者是集合中的单个字母乌戈。可以给出多种符号模式,用逗号分隔。
字母 ugoa 的组合控制哪些用户对文件的访问权限将被更改:拥有该文件的用户 (u)、文件组中的其他用户 (g)、不在文件组中的其他用户 (o) 或所有用户用户(一)。如果没有给出这些,则效果就像给出了 a,但 umask 中设置的位不受影响。
运算符 + 导致将选定的文件模式位添加到每个文件的现有文件模式位中;- 导致它们被删除;而 = 导致它们被添加并且导致未提及的位被删除,但目录未提及的设置用户和组 ID 位不受影响。
字母 rwxXst 为受影响的用户选择文件模式位:读 (r)、写 (w)、执行(或搜索目录)(x)、仅当文件是目录或已具有某些文件的执行权限时才执行/搜索用户 (X)、执行时设置用户或组 ID (s)、限制删除标志或粘滞位 (t)。您可以指定字母 ugo 之一,而不是这些字母中的一个或多个:授予拥有该文件的用户的权限 (u)、授予属于该文件组的其他用户的权限 (g)、以及授予不属于上述两个类别的用户的权限 (o)。
答案2
文件和目录通常需要不同的文件模式位,而chmod -R
通常对所有条目应用相同的模式。
区分文件和目录find
是一个有用的实用程序。
更改常规文件的模式:
# Finds all regular files and passes them to chmod
find /path/to/dir -type f | xargs chmod u=rw,g=r,o=r
更改目录模式:
# Directories require the execution bit to be accessible
find /path/to/dir -type d | xargs chmod u=rwx,g=rx,o=rx
该find
实用程序本身是递归的,因此不需要chmod
与-R
标志一起使用。
答案3
如果您想对每个文件/目录等拥有单独的权限,您需要首先找到这些项目,然后对它们执行某些操作示例:
find . -type d -name '*spec_dir*' | xargs chmod 755
因此,上面将搜索当前目录中的所有子目录,然后将权限设置为 drwxr-xr-x 到所有找到的名称中包含的内容spec_dir
。
如果您需要添加/删除权限而不重置它们,请使用 g+/-p 格式。例如,只为其他组添加执行权限:o+x
chmod o+x file
或在上面的命令上下文中... | xargs chmod o+x
你也可以对你的文件做同样的事情find . -type f -name 'my_files*'
......等等。
答案4
更新
感谢@SkyDan 的帮助和这个 Unix 问题在这里我找到了解决办法。
我首先做了
~$ find . -type d -print0 | xargs -0 chmod 755
将所有目录更改为用户可读、可写、可执行。然后我做了
~$ find . -type f -print0 | xargs -0 chmod 644
使所有文件可供用户读/写。