我有一个归档文件,它是由其他人存档的,我想在下载它之后自动地在提取的文件中更改文件系统的一个分支,以获得读访问权。(我不能改变档案的创建方式)。

我已经研究了这个线程: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的所有子目录递归地执行此操作

其他回答

尝试同时更改所有权限:

chmod -R +xr

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

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

要使所有内容都可由所有者写入,由组读取/执行,并且世界可执行:

chmod -R 0755

使一切敞开:

chmod -R 0777

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

chmod -R 0777 ./

递归地添加可执行权限到当前文件夹中的所有文件(不是文件夹),扩展名为sh:

找到。-name '*.sh' -type f | xargs chmod +x

*注意管道(|)