Answers:
这是一个脚本,您可以通过将mode作为第一个参数,并将一个或多个目录名称作为后继参数来进行调用。在Linux下,如果您不传递任何目录名,就好像您传递了.
(当前目录)一样。命名这个脚本rchmodf
,使其可执行(chmod a+rx /path/to/rchmodf
)并将它放在您的脚本的某个地方$PATH
。
#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
说明:mode=$1; shift
将变量设置为mode
脚本的第一个参数,并从列表中删除该第一个参数。"$@"
扩展到所有参数的列表。
如果愿意,可以制作一个既接受目录模式又接受文件模式的脚本。
#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
注意744不是有用的文件模式。644(用户可写且可在世界范围内读取)和755(也可在世界范围内执行)更为常见。而且,将树中的每个文件更改为可执行文件或不执行文件的做法很少有用。您可能需要使用诸如+rX
(capital的参数)调用此脚本X
,以仅对目录和已经可执行的文件设置可执行位。实际上,X
这些脚本可能是您追求的符号模式:chmod -R +rX .
。
使用bash或zsh,还有另一种递归操作的方法,但仅适用于目录。对于bash,您需要版本4并首先运行shopt -s globstar
。
chmod a+rx **/*/
在zsh中,只能通过后缀(.)
:对文件进行操作chmod a+r **/*(.)
。
我将传递Nautilus问题。
由user23538链接的脚本,希望您不要介意。
我已经尝试过了,效果很好。请注意,如果您使用。作为路径参数(在脚本所在的目录中运行),实际上它确实将脚本自身的文件权限更改为644,因此请将其放在上面的目录中。
#!/bin/sh
#
# chmodr.sh
#
# author: Francis Byrne
# date: 2011/02/12
#
# Generic Script for recursively setting permissions for directories and files
# to defined or default permissions using chmod.
#
# Takes a path to recurse through and options for specifying directory and/or
# file permissions.
# Outputs a list of affected directories and files.
#
# If no options are specified, it recursively resets all directory and file
# permissions to the default for most OSs (dirs: 755, files: 644).
# Usage message
usage()
{
echo "Usage: $0 PATH -d DIRPERMS -f FILEPERMS"
echo "Arguments:"
echo "PATH: path to the root directory you wish to modify permissions for"
echo "Options:"
echo " -d DIRPERMS, directory permissions"
echo " -f FILEPERMS, file permissions"
exit 1
}
# Check if user entered arguments
if [ $# -lt 1 ] ; then
usage
fi
# Get options
while getopts d:f: opt
do
case "$opt" in
d) DIRPERMS="$OPTARG";;
f) FILEPERMS="$OPTARG";;
\?) usage;;
esac
done
# Shift option index so that $1 now refers to the first argument
shift $(($OPTIND - 1))
# Default directory and file permissions, if not set on command line
if [ -z "$DIRPERMS" ] && [ -z "$FILEPERMS" ] ; then
DIRPERMS=755
FILEPERMS=644
fi
# Set the root path to be the argument entered by the user
ROOT=$1
# Check if the root path is a valid directory
if [ ! -d $ROOT ] ; then
echo "$ROOT does not exist or isn't a directory!" ; exit 1
fi
# Recursively set directory/file permissions based on the permission variables
if [ -n "$DIRPERMS" ] ; then
find $ROOT -type d -print0 | xargs -0 chmod -v $DIRPERMS
fi
if [ -n "$FILEPERMS" ] ; then
find $ROOT -type f -print0 | xargs -0 chmod -v $FILEPERMS
fi
我编写了一个脚本,基本上可以完成上述操作,但是还为命令行选项(目录和/或文件权限,或者排除两者)提供了一定的灵活性,它将所有内容自动重置为755-644。它还检查一些错误情况。
http://bigfloppydonkeydisk.blogspot.com.au/2012/09/recursively-chmod-only-files-or.html