我有一个存档,由其他人存档,我想在下载后自动更改提取文件中的文件系统分支以获得读取权限。 (我无法更改存档的创建方式)。
我查看了这个帖子: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 {} +
但一定有更好的办法。
最佳答案
您可以使用带有 X
模式字母(大写 X)的 chmod 来为目录设置可执行标志。
在下面的示例中,可执行标志被清除,然后递归地为所有目录设置:
~$ 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
- 同上,但只为 Group 和 Other 用户设置标志,不要触摸用户(所有者)权限chmod go+X foo
- 同上,但只适用于目录,不要碰文件chmod -R go+X foo
- 与上面相同,但对foo
的所有子目录递归
关于linux - 递归地chmod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377606/