如何‘查找’所有具有0**权限的文件和文件夹?

如何‘查找’所有具有0**权限的文件和文件夹?

我遇到了一个奇怪的情况,我发现许多文件和文件夹的权限设置为 000。这很容易通过以下方式修复:

sudo find . -perm 000 -type f -exec chmod 664 {} \; 
sudo find . -perm 000 -type d -exec chmod 775 {} \;

不幸的是,我突然意识到问题有点复杂,有一些奇怪的权限,例如 044 和其他一些奇怪的设置。事实证明,这些都是散落的,不可预测的。

有没有办法搜索 0** 等权限或其他此类非常有限的权限配置?

答案1

我会用这样的东西:

find . ! -perm -u=r ! -perm -u=w ! -perm -u=x -ls

或者,如果您更喜欢八进制表示法:

find . ! -perm -400 ! -perm -200 ! -perm -100 -ls

不幸的是,不知道如何将其作为一种-perm选择。

上面的语法是标准的,除了您可以在不支持获得类似输出的系统上-ls替换的部分(常见但不是 POSIX)之外。-exec ls -disl {} +find-ls

答案2

GNUfind,您可以通过查找与“为所有者设置的任何位”不匹配的文件来做到这一点:

find . ! -perm /700

同样在例如自由BSDfind

find . ! -perm +700

两者的工作方式相同。-perm /700或者-perm +700如果设置了任何所有者权限位则匹配;如果没有设置任何所有者权限位,则!否定该值,因此! -perm /700或匹配。! -perm +700其他位将被忽略。

答案3

如果您使用sfind或任何程序使用libfind或 如果您使用BSD find,您可以使用:

find path -perm +0xxx

查找设置了模式中提到的任何位的文件,因此

find . ! -perm +0700

应该适合你的情况。顺便说一句:这也受到GNU find.

请注意,这是一个在 POSIX 中未提及或在基于 SVr4 的系统中实现的扩展find

相关内容