递归更改文件权限而不是目录?

use*_*394 13 filesystems permissions find chmod

我正在对迁移到 unix 系统的某些文件的权限进行大规模递归更改。我把它们改成了ug+rw,但是后来发现不能遍历子目录。我查看了手册页chmod并没有看到任何排除目录的解释,所以我搜索了一下,发现人们过去常常find递归地将目录的权限更改为用户和组的“执行”。我这样做了,然后我可以调查他们。

但在我看来,我应该能够执行此查找chmod- 以递归方式将文件更改为读/写,但不会使目录无法遍历。我是否以“正确”的方式完成了此操作,还是有更简单的方法来做到这一点?

enz*_*tib 12

更好的解决方案应该是

chmod -R ug=rwX,o=rX /path
Run Code Online (Sandbox Code Playgroud)

大写的X意思是:如果设置执行位

该文件是一个目录或已经对某些用户具有执行权限

(引自chmod手册页)。

或者,如果你想使用 find

find /path \( -type f -exec chmod ug=rw,o=r   {} + \) -o \
           \( -type d -exec chmod ug=rwx,o=rx {} + \)
Run Code Online (Sandbox Code Playgroud)