我有一个归档文件,它是由其他人归档的,我想在下载它后自动更改提取文件中文件系统的分支以获得读取权限。(我无法更改存档的创建方式)。
我看了一下这个线程: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 {} +
但一定有更好的办法。
6条答案
按热度按时间r6vfmomb1#
您可以使用chmod和
X
模式字母(大写的X)来设置仅用于目录的可执行标志。在下面的示例中,可执行标志被清除,然后递归地为所有目录设置:
一点解释:
chmod -x foo
-清除foo
的 eXecutable 标志chmod +x foo
-为foo
设置 eXecutable 标志chmod go+x foo
-同上,但仅为 Group 和 Other 用户设置标志,不触及 User(所有者)权限chmod go+X foo
-与上面相同,但仅适用于目录,不涉及文件chmod -R go+X foo
-与上面相同,但对foo
的所有子目录执行 * 递归 * 操作swvgeqrz2#
要列出目录,除了执行访问权限之外,还需要读取访问权限。如果您只有执行访问权限,那么您可以找到目录中条目的名称,但没有其他信息(甚至没有类型,所以您不知道哪些条目是子目录)。这对我很有效:
f1tvaqid3#
尝试同时更改所有权限:
jhdbpxl94#
要使所有内容可由所有者写入,可由组读取/执行,并且可在全世界执行:
把一切都打开:
pieyvz9o5#
将可执行权限递归添加到当前文件夹中扩展名为
sh
的所有文件(不是文件夹):find . -name '*.sh' -type f | xargs chmod +x
|
)bcs8qyzn6#
对从当前路径开始的所有文件和目录赋予给予0777:
chmod -R 0777 ./