CHMOD – 为文件和目录应用不同的权限

我一直在试图清理几个盒子上的权限,一直在淘chmod的人以及所有的互联网文档,我没有任何运气处理 – 所以在这里,我们走了。

基本上,我有一个目录与许多子目录和文件 – 我想设置以下权限:

对于目录:770(u + rwx,g + rwx,o-rwx)

对于文件:660(U + rw,g + rw,ax,o-rw)

如果可能的话,我想尝试使用单个recursionchmod来做到这一点 – 以避免recursion通过每个目录和设置逐个文件的权限。

我想有没有必要写一个我自己的shell脚本来做到这一点 – 但我一直没能find任何东西。

我感谢您的帮助!

我确实发现了一个有用的脚本,因为通常有用的做法是同时更改文件和目录权限,而且这些权限通常是链接的。 770和660用于文件服务器上的共享目录,755/644用于Web服务器目录等等。我保留一个脚本,这个服务器在root的bin /中最常用的模式,模式不适用。

#!/bin/sh # syntax: setperm.s destdir # if [ -z $1 ] ; then echo "Requires single argument: <directoryname>" ; exit 1 ; fi destdir=$1 dirmode=0770 filemode=0660 YN=no printf "\nThis will RECURSIVELY change the permissions for this entire branch:\n " printf "\t$destdir\n" printf "\tDirectories chmod = $dirmode\tFiles chmod = $filemode\n" printf "Are you sure want to do this [$YN]? " read YN case $YN in [yY]|[yY][eE][sS]) # change permissions on files and directories. find $destdir -type f -print0 | xargs -0 chmod $filemode $i find $destdir -type d -print0 | xargs -0 chmod $dirmode $ii ;; *) echo "\nBetter safe than sorry I always say.\n" ;; esac 

不需要脚本。

//目录:

 find . -type d -exec chmod XXX {} \; 

//文件:

 find . -type f -exec chmod XXX {} \; 

在你的情况下,它可能不必像其他人所做的那样复杂(虽然对于这种事情来说, find确实是一个很好的工具)。 这些模式之间的区别是执行位。 如果没有文件已经设置了执行位,那么你可以在chmod中进行一次调用,就像你问的那样。

 chmod -R u=rwX,g=rwX,o= FILE... 

这里的关键是大写字母X ,手册页解释为

仅当文件是目录或已经具有某个用户的执行权限时执行/search。

因此,如果你的文件还没有设置执行位,它只会被设置为目录。

清洁和简单:

 chmod 660 $(find . -type f) chmod 770 $(find . -type d) 

我发现至less对于我的用例来说,使用rsync将目录复制到自身上要比直接使用chmod find的文件列表快得多。

 rsync -rpt --chmod=D770,F660 . . 

如果你想添加一个chown到相同的操作, rsync可以让你使用--chown=user:group选项。