Unix中使用find命令按名称和权限搜索文件的异常问题
解决find命令组合条件失效的问题
问题根源分析
你遇到的问题不是-a选项失效,而是对-perm参数的用法理解有误:
-perm -mode表示文件权限必须包含指定的所有权限位,比如-perm -0000没有要求任何权限位,所以所有文件都满足这个条件,这时候加上-iname "R*"自然就等价于只按名称过滤。- 第二个命令里,看起来只按权限过滤,大概率是当前目录下所有以
R开头的文件恰好都满足-perm -0222(即其他用户拥有写权限),所以筛选结果和单独搜权限的结果一致。
正确用法示例
根据你的需求,调整-perm的写法即可:
找名称以R开头且完全无任何权限的文件:
用精确匹配权限0000,而不是-0000:find . -perm 0000 -iname "R*"(
-a是默认的逻辑与,可省略)找名称以R开头且其他用户有写权限的文件:
确保目标目录下存在符合两个条件的文件,否则结果为空。命令本身没问题,可简化为:find . -iname "R*" -perm -0222找名称以R开头且任意一类用户(所有者/组/其他)有写权限的文件:
如果你的需求是只要有写权限位被设置,用/表示匹配任意位(部分旧系统用+,推荐用/):find . -iname "R*" -perm /0222
额外提示
- 可以用
ls -l查看目标文件的实际权限,验证条件是否合理; - 如果要排除某个条件,用
!,比如找名称以R开头且其他用户没有写权限的文件:find . -iname "R*" ! -perm -0222
内容的提问来源于stack exchange,提问作者amine0395
相关产品推荐
相关产品推荐

