【问题标题】:Why does recursive mode on chmod do everything but recursion?为什么 chmod 上的递归模式除了递归之外什么都做?
【发布时间】:2011-03-29 04:39:21
【问题描述】:

chmod -R 775 *.cgi 只改变当前目录下文件的权限,子目录下的文件根本不会被修改。这与简单地执行chmod 775 *.cgi 的功能完全相同。我见过人们使用诸如find 之类的解决方案。好的很好,但是如果 -R 模式什么都做不了,为什么还要存在呢?

【问题讨论】:

  • 非常感谢您的所有回答。使用 find 解释的答案很有用,但我选择了 msw 的答案,因为我对 -R 的作用更加好奇。我只选择了 msw 的而不是 Matthew 的,因为 msw 的稍早一些。

标签: bash unix centos chmod


【解决方案1】:

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

-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

【讨论】:

    【解决方案2】:

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

    假设 foo0.cgi 和 foo1.cgi 是目录的内容。如果您输入chmod -R o+r *.cgi,那么chmod 将获得'-R'、'o+r'、'foo0.cgi'和'foo1.cgi'作为参数。

    你想做的事都可以轻松完成:

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

    【讨论】:

    • 这个答案是同一个dmckee
    【解决方案3】:

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

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

    要查找当前目录及其子目录中的所有 cgi 文件,并在其上运行 chmod,您可以这样做:

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

    【讨论】:

    • 这个答案是同一个dmckee
    【解决方案4】:

    要完成你想要的尝试

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

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

    【讨论】:

      【解决方案5】:

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

      如果您说chmod -R 775 *.cgi,shell 会将*.cgi 扩展为与该模式匹配的文件列表,并将其作为参数列表传递——因此不会要求chmod 查看任何其他文件目录。

      (它递归到任何匹配*.cgi...的目录

      【讨论】:

      • 哦,明白了。所以它对于递归更改某个目录下的所有文件很有用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      相关资源
      最近更新 更多