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


9

我一直在尝试清理几个盒子上的权限,并一直在搜索chmod以及所有我没有运气的互联网文档-所以我们开始吧。

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

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

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

我想尝试使用单个递归chmod进行此操作-以避免递归遍历每个目录并设置逐个文件的权限。

我想有一种无需编写自己的shell脚本就能做到的方法-但是我什么也找不到。

我感谢您的帮助!

Answers:


10

我确实找到了一个有用的脚本,因为一键更改文件和目录权限通常很有用,而且它们经常链接在一起。770和660用于文件服务器上的共享目录,755/644用于Web服务器目录,等等。模式不适用。

#!/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

哇!这正是我想要的。非常感谢你!
Skone 2010年

嗨,iPaulo –您能否在“发现$ destdir -type d -print0 | xargs -0 chmod $ dirmode $ ii ;;”这一行中偶然地解释“ $ ii”。我不确定我理解为什么它不只是“找到$ destdir -type d -print0 | xargs -0 chmod $ dirmode $ i ;;”;谢谢!
Skone 2010年

20

无需脚本。

//目录:

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

//文件:

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

17

在您的情况下,它可能不必像其他人所说的那样复杂(尽管find从总体上说,它确实是一种很好的工具)。模式之间的差异是执行位。如果是没有文件设置执行位的情况,那么您可以chmod按要求一次调用来执行该操作。

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

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

仅当文件是目录或已经对某些用户具有执行权限时才执行/搜索。

因此,如果您的文件尚未设置执行位,则只会为目录设置该位。


这很棒,但是比编写777更长。-X是否有简写形式?
Elliott B

6

我发现至少就我的用例而言,使用rsync目录复制到自身上要比chmod直接使用目录中的文件列表快得多find

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

如果要向chown同一操作添加a ,则也rsync可以使用该--chown=user:group选项进行操作。


哇,这实际上比chmod -R快很多。
Epeli

比chmod快得多。以这种方式使用rsync有什么缺点吗?我已经做了很多,一切似乎都很好。
懒惰

1

干净简单:

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

非常优雅的方法。
user5336 2010年

3
也许,但是请注意,这仅在文件中没有空格的情况下有效。一种更“安全”的方法是find ... -exec chmod ... {} \;
isaaclw 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.