查找所有用户拥有rw权限的文件 执行自写命令无返回如何解决
原命令问题排查
cut参数书写错误
你写的cut -f1 d" "缺少分隔符参数的前缀-,正确的参数格式应为cut -f1 -d " ",同时ls -l输出字段间为多空格分隔,使用单空格作为分隔符的cut命令无法正确切分字段,会导致提取权限字段失败。grep正则语法不匹配
默认grep使用基础正则表达式,{}重复匹配符需要转义才能生效,你直接写.{4}rw.{4}会被识别为普通字符匹配,无法命中目标规则;如果要直接使用{}语法,需要给grep加-E参数启用扩展正则表达式。- 匹配逻辑不符合需求
权限字段共10位,结构为[文件类型][属主权限3位][属组权限3位][其他用户权限3位]:
如果你需要的是所有用户(属主、属组、其他所有用户)均有rw权限,匹配规则应为^.rw.rw.rw,对应第2-3、5-6、8-9位均为rw;
如果你需要的是你示例中的「属主、属组均有rw权限」,匹配规则应为^.{4}rw,对应第5-6位为rw,原有正则多写了后面的.{4}会截断匹配范围。
正确实现方法
方法1:基于ls+grep的实现
# 输出属主、属组均有rw权限的完整文件信息 ls -l | grep -E '^.{4}rw' # 输出所有用户均有rw权限的完整文件信息 ls -l | grep -E '^.rw.rw.rw'
这里直接用awk代替cut提取字段更稳定,如果你只需要输出权限字段可以用:
ls -l | awk '{print $1}' | grep -E '^.rw.rw.rw'
方法2:基于find的更可靠实现(推荐用于脚本场景)
find命令不受ls输出格式兼容性影响,更适合批量处理或脚本使用:
# 查找当前目录及子目录下所有用户均有读写权限的普通文件 find . -type f -perm /u=rw,g=rw,o=rw # 查找当前目录及子目录下属主、属组均有读写权限的所有文件/目录 find . -perm /u=rw,g=rw
内容的提问来源于stack exchange,提问作者theoutstandingme
相关产品推荐
相关产品推荐

