如何在Linux上使目录下的所有文件都可读取?

47

我希望能够使某个目录下的所有文件(和文件夹)都变成全局可读,而不必逐个chmod每个文件。如果有一个选项可以递归地执行此操作(查看文件夹并在其中的所有文件上进行chmod 666),那就太好了。


1
@PedroRomano 你怎么知道这个不是用来编写Bash脚本的? - user529758
@H2CO3:似乎不符合我可以在这里问什么样的问题?。 标题或正文中没有提到_Bash_。 没有bash标签。 但是,这只是一个评论,对吧? - Pedro Romano
1
@Rorchackh,您是想只读取文件而排除目录,还是当您写“所有文件”时,其实指的是“目录中的所有条目”?我认为后者更合适。 - user529758
包括目录中的所有内容,包括子目录。 - Rorchackh
3个回答

59

man 3 chmod 包含您需要的信息。

chmod -R +r directory

-R选项告诉chmod递归操作。


3
历史上 -r 用于表示递归操作,而 -R 则表示危险的递归操作。如果在 chmodchown 中使用大写的 R,那是因为我们更倾向于使用更精确的操作,比如使用 find 命令。请查看我的回答! - F. Hauri - Give Up GitHub
我非常感激您的回答,但即使对于我这个不是新手的人来说,理解起来也有点困难。@F.Hauri - insign
@insign 递归地更改权限可能很危险!举例来说,你可能会 .1 破坏一些系统要求,.2 暴露私人文件...从那里恢复错误的操作可能非常棘手。 - F. Hauri - Give Up GitHub

12

由于目录可能包含链接和/或挂载点,因此使用find可以确保对要做什么和不做什么进行最细粒度的控制....

find directory \( -type f -o -type d \) -print0 |
    xargs -0 chmod ugo+r

排除挂载点下的路径:

find directory -mount \( -type f -o -type d \) -print0 |
    xargs -0 chmod ugo+r

排除一些特定的文件(例如 .htaccess 文件):

find directory \( -type f -o -type d \) ! -name '.htaccess' -print0 |
    xargs -0 chmod ugo+r


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接