Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 是否有一个shell命令递归地授予目录和文件权限?_Bash_Shell_Command Line - Fatal编程技术网

Bash 是否有一个shell命令递归地授予目录和文件权限?

Bash 是否有一个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

有人能给我一个递归命令,它将通过一个目录,并使所有普通文件权限644和所有子目录755


每次我必须在我的主机上安装一些东西时,我真的厌倦了手工操作。我不知道足够的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的答案确实比公认的答案更好。