首页
学习
活动
专区
圈层
工具
发布

Chmod递归
EN

Stack Overflow用户
提问于 2012-11-14 19:06:09
回答 6查看 525.4K关注 0票数 251

我有一个由其他人归档的归档文件,我希望在下载后自动更改解压缩文件中文件系统的一个分支,以获得读取访问权限。(我不能改变存档的创建方式)。

我查过这个帖子:chmod: How to recursively add execute permissions only to files which already have execute permission as查过其他一些帖子,但没有查到joy。

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

代码语言:javascript
复制
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

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

尝试查看没有x权限的目录时出现find错误,因此不会将其传递给chmod。到目前为止,我一直在做的是手动更改父目录上的权限,然后进入子目录并对它们执行相同的操作,等等。但这是大量的手工劳动。有没有什么方法可以自动做到这一点?

也就是说,我现在是怎么做的:

执行以下操作:

代码语言:javascript
复制
$ chmod -R +x
$ chmod -R +r

直到我没有得到错误,然后

代码语言:javascript
复制
$ find -type f -exec chmod -x {} +

但肯定有更好的办法。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-14 19:23:20

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

代码语言:javascript
复制
find . -type d -exec chmod +rx {} \;
票数 131
EN

Stack Overflow用户

发布于 2012-11-14 19:36:26

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

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

代码语言:javascript
复制
~$ 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
  • chmod +x foo的eXecutable标志-为foo
  • chmod go+x foo设置eXecutable标志-与上面相同,但仅为组和其他用户设置该标志,不接触用户(所有者) permission
  • chmod go+X foo -与上面相同,但仅适用于目录,不接触files
  • chmod -R go+X foo -与上面相同,但递归地为foo

的所有子目录执行此操作

票数 178
EN

Stack Overflow用户

发布于 2012-11-14 19:20:11

尝试同时更改所有权限:

代码语言:javascript
复制
chmod -R +xr
票数 81
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13377606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档