找到所有 -perm -o=x ! -perm /o=rw 文件夹,并且该文件夹的所有祖先路径都需要“其他”的 x 权限?

找到所有 -perm -o=x ! -perm /o=rw 文件夹,并且该文件夹的所有祖先路径都需要“其他”的 x 权限?

我发现这sudo -u <user> test可能有效,但我的系统上没有 sudo 命令。

例如

/a d......--x
/a/aa d......--x YES
/b d......---
/b/bb d......--x NO

当我使用root用户时,无法使用test命令确定“其他”的权限。我发现的相关问题:测试用户对文件的有效权限

答案1

操作方法如下:

find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -perm -o=x -print \)
  • ! -perm -o=x -prune- 不要进入没有“其他”执行位的目录。
  • 括号并不是真正必需的,我添加它们只是为了清楚起见。如果没有它们,该命令的工作方式相同。
  • -print如果末尾没有显式的内容,find则也会打印修剪后的目录(不会下降的目录,即那些没有“其他”执行位的目录)。显式-print确保仅打印在右侧(修剪之后)找到的目录。

现在,这个命令将是最明显的一个。然而,有一些方法可以通过执行一些逻辑缩减来使其更短。

首先,如果你想一想,你不需要第二个-perm -o=x;如果第一个! -perm -o=x计算结果为“True”(意味着文件夹上没有执行位),它甚至不会到达右侧-o(因为从逻辑上讲,在检查后整个表达式将被计算为“True”)第一个条件)。这意味着只有当文件上的其他部分有执行位时,才会评估括号内的整个部分。

最重要的是,-perm -o=x括号内的部分是多余的,可以删除。

find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -print \)

-print现在,正如我所说,我们最后需要的原因是因为-prune操作返回“True”,并且我们不想打印那些修剪过的目录。但是,我们可以通过在;!之前添加来反转“True” 。-prune这些文件夹仍将被修剪,但结果将为“False”,因此它们无论如何都不会被打印。

find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw -print \)

然后我们就不再需要-print最后的了。

find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw \)

正如我所说,您可以删除括号。这就是你最终得到的:

最终缩短的命令:

find ./ ! -perm -o=x ! -prune -o -type d ! -perm /o=rw

相关内容