我有一个归档,由其他人归档,我想在下载后自动更改提取文件中的文件系统分支以获得读取权限.(我无法更改存档的创建方式).
我查看了这个帖子:chmod:如何递归地将执行权限添加到已经具有执行权限的文件中,而不是其他一些文件,但没有快乐.
目录最初带有多个但都是错误的标志,它们可能显示为:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Run Code Online (Sandbox Code Playgroud)
这些只是我到目前为止发现的少数几个,但可能更多.
find尝试查看没有x权限的目录时出错,因此不会将其传递给chmod.到目前为止我一直在做的是手动更改父目录的权限,然后进入子目录并为它们执行相同的操作,依此类推.但这是很多手工劳动.有没有办法自动完成这个?
即我现在是怎么做的:
做:
$ chmod -R +x
$ chmod -R +r
Run Code Online (Sandbox Code Playgroud)
直到我没有错误,然后
$ find -type f -exec chmod -x {} +
Run Code Online (Sandbox Code Playgroud)
但必须有更好的方法.
Dmi*_*nov 169
您可以将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
Run Code Online (Sandbox Code Playgroud)
一点解释:
chmod -x foo- 清除eXecutable标志foochmod +x foo- 设置eXecutable标志foochmod go+x foo- 与上述相同,但仅为Group和Other用户设置标志,请勿触摸User(所有者)权限chmod go+X foo - 与上述相同,但仅适用于目录,请勿触摸文件chmod -R go+X foo- 与上面相同,但对于所有子目录递归执行此操作fooFre*_*Foo 126
除了执行访问之外,您还需要读取访问权限才能列出目录.如果您只有执行权限,那么您可以找到目录中条目的名称,但没有其他信息(甚至不是类型,因此您不知道哪些条目是子目录).这对我有用:
find . -type d -exec chmod +rx {} \;
Run Code Online (Sandbox Code Playgroud)
小智 49
要使所有者可以写入所有内容,由组读取/执行,以及世界可执行文件:
chmod -R 0755
Run Code Online (Sandbox Code Playgroud)
让一切都敞开:
chmod -R 0777
Run Code Online (Sandbox Code Playgroud)