如何找到所有无法写入的文件?
如果考虑到标准权限和 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 ')' ')'
四项测试按顺序:
- 是普通文件吗?
- 它是我拥有但没有写入权限的文件吗?
- 它是否是我不拥有但属于我的组的文件,并且我没有组写入权限?
- 它是否是一个我不拥有、不属于我的组、并且我没有一般(“其他”)写入权限的文件?
这样做的好处是您可以替换另一个用户的名称和组,但我认为 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 ')'