Chmod递归

时间:2012-11-14 11:06:09

标签: linux shell find chmod

我有一个存档,由其他人存档,我想在下载之后自动更改提取文件中的文件系统分支以获得读取权限。 (我无法更改存档的创建方式。)

我已经调查了这个帖子:chmod: How to recursively add execute permissions only to files which already have execute permission和其他人一样,但没有快乐。

目录最初带有多个但都是错误的标志,它们可能显示为:

drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

这些只是我到目前为止发现的少数几个,但可能更多。

尝试查看没有find权限的目录时出现

x错误,因此未将其传递给chmod。到目前为止我一直在做的是手动更改父目录的权限,然后进入子目录并为它们执行相同的操作,依此类推。但这是很多手工劳动。有没有办法自动完成这个?

即。我现在怎么做:

做的:

$ chmod -R +x
$ chmod -R +r

直到我没有错误,然后

$ find -type f -exec chmod -x {} +

但必须有更好的方法。

6 个答案:

答案 0 :(得分:161)

您可以将chmod与X模式字母(大写X)一起使用,仅为目录设置可执行标志。

在下面的示例中,可执行标志被清除,然后递归地为所有目录设置:

~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y

~$ chmod -R go-X foo 
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

~$ chmod -R go+X foo 
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

一点解释:

  • chmod -x foo - 清除foo
  • eXecutable 标志
  • chmod +x foo - 为foo
  • 设置 eXecutable 标志
  • chmod go+x foo - 与上述相同,但仅为其他用户设置标记,请勿触摸用户(所有者)许可
  • chmod go+X foo - 与上述相同,但仅适用于目录,请勿触摸文件
  • chmod -R go+X foo - 与上述相同,但为foo
  • 的所有子目录执行递归

答案 1 :(得分:120)

除了执行访问权限外,您还需要读取权限才能列出目录。如果您只有执行权限,那么您可以找到目录中条目的名称,但没有其他信息(甚至不是类型,因此您不知道哪些条目是子目录)。这对我有用:

find . -type d -exec chmod +rx {} \;

答案 2 :(得分:77)

尝试同时更改所有权限:

chmod -R +xr

答案 3 :(得分:48)

使所有者可以写入所有内容,由组读取/执行,以及世界可执行文件:

chmod -R 0755

让一切都敞开:

chmod -R 0777

答案 4 :(得分:13)

使用sh扩展名向当前文件夹中的所有文件(不是文件夹)添加递归的可执行权限:

find . -name '*.sh' -type f | xargs chmod +x

*请注意pipe (|)

答案 5 :(得分:0)

将0777赋予从当前路径开始的所有文件和目录:

  

chmod -R 0777 ./