shell Chmod递归

v1uwarro  于 11个月前  发布在  Shell
关注(0)|答案(6)|浏览(142)

我有一个归档文件,它是由其他人归档的,我想在下载它后自动更改提取文件中文件系统的分支以获得读取权限。(我无法更改存档的创建方式)。
我看了一下这个线程: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 {} +

但一定有更好的办法。

r6vfmomb

r6vfmomb1#

您可以使用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

一点解释:

  • chmod -x foo-清除fooeXecutable 标志
  • chmod +x foo-为foo设置 eXecutable 标志
  • chmod go+x foo-同上,但仅为 GroupOther 用户设置标志,不触及 User(所有者)权限
  • chmod go+X foo-与上面相同,但仅适用于目录,不涉及文件
  • chmod -R go+X foo-与上面相同,但对foo的所有子目录执行 * 递归 * 操作
swvgeqrz

swvgeqrz2#

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

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

f1tvaqid3#

尝试同时更改所有权限:

chmod -R +xr
jhdbpxl9

jhdbpxl94#

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

chmod -R 0755

把一切都打开:

chmod -R 0777
pieyvz9o

pieyvz9o5#

将可执行权限递归添加到当前文件夹中扩展名为sh的所有文件(不是文件夹):
find . -name '*.sh' -type f | xargs chmod +x

bcs8qyzn

bcs8qyzn6#

对从当前路径开始的所有文件和目录赋予给予0777:
chmod -R 0777 ./

相关问题