Bash 是否有一个shell命令递归地授予目录和文件权限?
有人能给我一个递归命令,它将通过一个目录,并使所有普通文件权限644和所有子目录755Bash 是否有一个shell命令递归地授予目录和文件权限?,bash,shell,command-line,Bash,Shell,Command Line,有人能给我一个递归命令,它将通过一个目录,并使所有普通文件权限644和所有子目录755 每次我必须在我的主机上安装一些东西时,我真的厌倦了手工操作。我不知道足够的BASH(Shell?)命令来执行此操作。第一行更改文件权限,第二行更改active directory及其子目录中的目录权限 find . -type f -print0 | xargs -0 chmod 644 find . -type d -print0 | xargs -0 chmod 755 有X个选项可供选择 chmod
每次我必须在我的主机上安装一些东西时,我真的厌倦了手工操作。我不知道足够的BASH(Shell?)命令来执行此操作。第一行更改文件权限,第二行更改active directory及其子目录中的目录权限
find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755
有X个选项可供选择
chmod a+X * -R
这将只为目录而不是文件提供执行位。要使用一个命令分别设置644、755,请使用:
chmod a=rX,u+w <files/dirs> -R
chmoda=rX,u+w-R
使用符号模式名称而不是原始数字权限:
chmod -R u=rwX,go=rX somedir
X
权限标志仅将目录或已可执行文件设置为可执行文件,-R
标志表示“递归”,并将权限应用于somedir
的所有内容否,没有递归更改权限的命令。如果有这样一个命令,它将违反Unix的格言:做一件事并把它做好
但是,有两个命令:一个用于递归(find
),另一个用于更改权限(chmod
)
因此,神奇的命令行是:
find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +
或者至少是在
-print0
和-0
业务之前。人们总是这样建议,我知道为什么,但这让我很恼火。太棒了,工作得很愉快。你为我节省了无数的时间和无聊!!:怎么了?你试过那个命令吗?它适用于我工作过的每台机器,它符合POSIX,它符合单一Unix规范。与所有其他答案不同,这些答案依赖于在许多平台上都不可用的非标准专有扩展……错误:说“没有命令”,因为在GNU系统上,有。OP要求提供“Bash”,它也是GNU。然而,我主要担心的是,你没有提到其他人,而间接地说他们错了。解释POSIX事件会更有帮助,这样OP就能理解它对他的影响。使用find和chmod比使用find、将输出传输到xargs然后使用chmod要好。Jörg W Mittag的答案确实比公认的答案更好。