Bash 为什么chmod上的递归模式除了递归之外什么都做?

Bash 为什么chmod上的递归模式除了递归之外什么都做?,bash,unix,centos,chmod,Bash,Unix,Centos,Chmod,chmod-R 775*.cgi仅更改当前目录中文件的权限,子目录中的文件根本不会被修改。这与简单地执行chmod 775*.cgi的功能完全相同。我见过人们使用解决方案,比如使用find等等。好的,很好,但是如果-R模式没有完成任何任务,为什么它还会存在呢?可能是因为您没有名为*.cgi的目录。引述: -R递归更改文件模式位。对于命名 目录,chmod应更改文件 目录的模式位和所有 它下面的文件层次结构中的文件 例如: $ ls -R .: a a.c b.c c.c ./a: a.c

chmod-R 775*.cgi
仅更改当前目录中文件的权限,子目录中的文件根本不会被修改。这与简单地执行
chmod 775*.cgi
的功能完全相同。我见过人们使用解决方案,比如使用
find
等等。好的,很好,但是如果-R模式没有完成任何任务,为什么它还会存在呢?

可能是因为您没有名为
*.cgi的目录。引述:

-R递归更改文件模式位。对于命名 目录,chmod应更改文件 目录的模式位和所有 它下面的文件层次结构中的文件

例如:

$ ls -R
.:
a  a.c  b.c  c.c

./a:
a.c  b.c  sub

./a/sub:
a.c  b.c  
$ chmod -R 444 *.c
$ ls -l
drwxr-xr-x 3 msw msw 4096 2010-08-12 18:07 a
-r--r--r-- 1 msw msw    0 2010-08-12 18:07 a.c
-r--r--r-- 1 msw msw    0 2010-08-12 18:07 b.c
-r--r--r-- 1 msw msw    0 2010-08-12 18:07 c.c
$ : directory a not affected
$ chmod -R u-w a    
$ ls -l a
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 a.c
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 b.c
dr-xr-xr-x 3 msw msw 4096 2010-08-12 18:07 sub
$ ls -l a/sub
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 a.c
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 b.c
$ : got em

-R
告诉
chmod
递归到作为参数给定的任何目录中

如果您说
chmod-R 775*.cgi
,shell将把
*.cgi
扩展成一个匹配该模式的文件列表,并将其作为参数列表传递,这样就不会要求
chmod
查看任何其他目录


(它将递归到与
*.cgi
..匹配的任何目录中)

以完成您想要尝试的内容

find . -name '*.cgi' -print0 | xargs -0 chmod 755

在这里,
find
生成一个列表,其中包含从当前目录向下以
.cgi
结尾的所有文件,并将该列表传递给
xargs
,该列表将
chmod
应用于每个文件。

*.cgi
由shell扩展为当前目录中以
.cgi
结尾的所有文件名的列表。然后shell使用这个文件名列表调用
chmod

chmod
查看它从shell中获得的所有文件名,在这些文件名中更改模式,如果其中一些是目录,则会递归。但它们可能都不是,所以没有什么可重复的

要查找当前目录及其子目录中的所有cgi文件,并对其运行
chmod
,您可以执行以下操作:

find . -name '*.cgi' -print0 | xargs -0 chmod 775

*
是一个内置的shell,而-R是一个命令行选项。所以
chmod
永远不会将
*
作为参数

假设foo0.cgi和foo1.cgi是目录的内容。如果键入
chmod-ro+R*.cgi
,则
chmod
将以“-R”、“o+R”、“foo0.cgi”和“foo1.cgi”作为参数

您想做的事情可以轻松完成:

find . -iname '*.cgi' | xargs chmod 755

哦,明白了。因此,它对于递归地更改某个目录下的所有文件非常有用。非常感谢所有的答案。解释使用find的答案很有用,但我选择了msw的答案,因为我更好奇-R的作用。我只选择了msw而不是Matthew,因为msw稍早一些。这个答案是相同的dmckee这个答案是相同的dmckee