如何找到特定文件夹中我无权写入权限的所有文件?

如何找到特定文件夹中我无权写入权限的所有文件?

如何找到所有无法写入的文件?

如果考虑到标准权限和 acls 那就太好了。

有没有一种“简单”的方法或者我必须自己解析权限?

答案1

尝试

find . ! -writable

该命令find返回文件列表,-writable仅过滤您具有写入权限的文件,然后!反转过滤器。

-type f如果您想忽略目录和其他“特殊文件”,您可以添加。

答案2

在非 Linux 系统和没有 GNU 的系统上find,以下内容可能会提供与 相同的输出find . -type f ! -writable,但它不会考虑辅助组。

myname=$( id -un )
mygroup=$( id -gn )

find . -type f '(' \
       '('   -user "$myname"                     ! -perm -u=w ')' -o \
       '(' ! -user "$myname"   -group "$mygroup" ! -perm -g=w ')' -o \
       '(' ! -user "$myname" ! -group "$mygroup" ! -perm -o=w ')' ')'

四项测试按顺序:

  1. 是普通文件吗?
  2. 它是我拥有但没有写入权限的文件吗?
  3. 它是否是我不拥有但属于我的组的文件,并且我没有组写入权限?
  4. 它是否是一个我不拥有、不属于我的组、并且我没有一般(“其他”)写入权限的文件?

这样做的好处是您可以替换另一个用户的名称和组,但我认为 GNU 不允许find-writable这样做。


相同的命令,但逻辑以 AND 形式编写:

find . -type f \
    ! '('   -user "$myname"                     -perm -u=w ')' \
    ! '(' ! -user "$myname"   -group "$mygroup" -perm -g=w ')' \
    ! '(' ! -user "$myname" ! -group "$mygroup" -perm -o=w ')'

相关内容