Answers:
我确实找到了一个有用的脚本,因为一键更改文件和目录权限通常很有用,而且它们经常链接在一起。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
在您的情况下,它可能不必像其他人所说的那样复杂(尽管find
从总体上说,它确实是一种很好的工具)。模式之间的差异是执行位。如果是没有文件设置执行位的情况,那么您可以chmod
按要求一次调用来执行该操作。
chmod -R u=rwX,g=rwX,o= FILE...
这里的关键是大写字母X
,手册页将其解释为
仅当文件是目录或已经对某些用户具有执行权限时才执行/搜索。
因此,如果您的文件尚未设置执行位,则只会为目录设置该位。
干净简单:
chmod 660 $(find . -type f)
chmod 770 $(find . -type d)
find ... -exec chmod ... {} \;