我有一个归档文件,它是由其他人存档的,我想在下载它之后自动地在提取的文件中更改文件系统的一个分支,以获得读访问权。(我不能改变档案的创建方式)。
我已经研究了这个线程:chmod:如何递归地只添加执行权限的文件已经有执行权限的一些其他,但没有乐趣。
目录最初带有多个但都是错误的标志,它们可能显示为:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
这些只是我目前为止发现的少数几个,但可能还有更多。
当试图查找一个没有x权限的目录时查找错误,因此不将其传递给chmod。到目前为止,我所做的是手动更改父目录的权限,然后进入子目录并对它们执行相同的操作,等等。但这需要大量的手工劳动。有没有什么方法可以自动做到这一点?
例如,我现在是怎么做的:
do:
$ 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的可执行标志
chmod +x foo -设置foo的可执行标志
chmod go+x foo -和上面一样,但是只为Group和其他用户设置标志,不要触及User(所有者)权限
chmod go+X foo -与上面相同,但只适用于目录,不涉及文件
chmod - r go+X foo -与上面相同,但对foo的所有子目录递归地执行此操作