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

yll*_*ate 3 osx shell permissions find

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

sudo find . -perm 000 -type f -exec chmod 664 {} \; 
sudo find . -perm 000 -type d -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud)

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

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

小智 9

我会使用这样的东西:

find . ! -perm -u=r ! -perm -u=w ! -perm -u=x -ls
Run Code Online (Sandbox Code Playgroud)

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

find . ! -perm -400 ! -perm -200 ! -perm -100 -ls
Run Code Online (Sandbox Code Playgroud)

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

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

  • `-not` 不是标准的,`!` 本身从来都不是问题,它甚至是 POSIX shell 关键字(`!`)的名称,它通常用作 `[` / `test` 命令的参数,此外还有`找到`。 (2认同)

Ste*_*itt 7

使用GNUfind,您可以通过查找与“为所有者设置的任何位”不匹配的文件来执行此操作:

find . ! -perm /700
Run Code Online (Sandbox Code Playgroud)

在例如FreeBSD 中find相同的是

find . ! -perm +700
Run Code Online (Sandbox Code Playgroud)

这两者的工作方式相同。-perm /700-perm +700匹配,如果任何拥有者的许可位被设置的; 如果没有设置所有者权限位,则!否定,所以! -perm /700! -perm +700匹配。其他位被忽略。