![如何找到特定文件夹中我无权写入权限的所有文件?](https://linux22.com/image/128021/%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E6%88%91%E6%97%A0%E6%9D%83%E5%86%99%E5%85%A5%E6%9D%83%E9%99%90%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%EF%BC%9F.png)
如何找到所有无法写入的文件?
如果考虑到标准权限和 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 ')'