You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetBSD环境下如何在Bash中列出当前用户可读的所有文件?

在NetBSD Bash下列出当前用户可读的所有文件

在NetBSD的Bash环境下,你之前考虑的ls -l | grep或者简单的find .确实没法覆盖所有场景——毕竟权限不止属主和属组这两种情况,其他用户组的可读权限也得考虑进去。我给你几个靠谱的实现方法:

最简洁准确的方法:用find的-readable选项

NetBSD自带的find工具支持-readable测试条件,它会直接检查当前用户是否对目标文件有读取权限,不管文件的属主、属组是谁,也能正确处理你所属的所有用户组权限,完全不用手动判断权限位。

如果只想列出文件(不包括目录),用这条命令:

find . -type f -readable

要是需要包括目录(毕竟目录的读权限允许你查看其内容),去掉-type f即可:

find . -readable

排除特定目录(可选)

如果有不需要扫描的目录(比如./.git或者./node_modules),可以用-prune来跳过它们,比如:

find . -path ./.git -prune -o -type f -readable -print

如果要排除多个目录,用-o连接即可:

find . \( -path ./.git -o -path ./node_modules \) -prune -o -type f -readable -print

手动判断权限(进阶)

如果你不想依赖-readable选项(虽然NetBSD完全支持),可以手动组合权限条件。不过要注意:这种方法需要处理你所属的所有用户组,而id -g -n只能获取主组,所以如果你属于多个附加组,这种方法会有遗漏,不如-readable省心。示例命令:

find . -type f \
  \( -user "$USER" -perm -u=r \) \
  -o \( -group "$(id -G -n | tr ' ' '\n' | xargs -I {} echo "-group {} -o " | sed 's/ -o $//')" -perm -g=r \) \
  -o \( -perm -o=r \)

这条命令会检查三种可读场景:

  • 文件属主是你,且用户位有读权限;
  • 文件属组是你所属的任意组,且组位有读权限;
  • 其他用户位有读权限。

内容的提问来源于stack exchange,提问作者HSchmale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:11:29