如何查看当前工作目录中仅具有读取权限的文件?

如何查看当前工作目录中仅具有读取权限的文件?

对于任何了解 find 命令的人来说,这个问题似乎很简单。但我们假设 find 命令在我的系统上不起作用。如何在不使用“find”命令的情况下根据文件的权限查看文件?

答案1

如果没有find,您仍然有一个 shell(可以扩展通配符),并且可以循环遍历目录的内容,首先检查每个文件是否为文件,然后检查它是否不可写,然后检查它是否不可执行,然后检查它是否可读。

有人可能会编写一个脚本来演示,但从阅读文档开始会有所帮助,例如,POSIX测试

顺便说一下,使用“仅有的问题标题中的“将排除文件可写或可执行的结果。在POSIXfind,你可以这样表达:

find . -type f \! \( -perm -u=w -o -perm -u=x -o -perm -g=w -o -perm -g=x -o -perm -o=w -o -perm -o=x \)

GNUfind提供允许更紧凑表达式的扩展:

find . -type f \! -perm /u=wx,g=wx,o=wx 

test实用程序(更常用作[])提供比 更简单的测试find,例如,

for name in *; do [ -f "$name" -a -r "$name" -a ! -w "$name" -a ! -x "$name" ] && ls -l "$name"; done

但是,其权限仅适用于用户, 不是团体或者其他。要根据这些排除文件,您可以使用ls,例如,

for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r--r--r--*) echo "$name";; esac; done

或(如果您想允许可执行文件)

for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r-?r-?r-*) echo "$name";; esac; done

答案2

您可以ls -l结合使用grep

ls -l | grep -e "-r[w-][x-][r-][w-][x-][r-][w-][x-]"

这将只显示您具有读取权限的文件。如果您[-d]在模式开头添加而不是破折号,您还将获得目录。

答案3

您可以使用,

# for file in /your/path/*; do [ -r "$file" ] && [ -f "$file" ] && printf '%s\n' "$file"; done
  • -r代表文件存在并且已授予读取权限。

要查找可读文件,无论所有者、组或其他人如何,可以检查rls 的文件权限列中的标志。

ls -l | awk '$1 ~ /r/'

答案4

zsh

view ./*(.^f-444)

或者:

view ./*(.r,.A,.R)

将查看至少设置了一个读取权限位的非隐藏常规文件。相当于:

find . ! -name . -prune ! -name '.*' -type f \(
  -perm -001 -o -perm -010 -o -perm -100 \)

或使用 GNU find

find . -maxdepth 1 ! -name '.*' -type f -perm /444

尽管:

view ./*(.e:'[ -r $REPLY ]':)

将查看非隐藏的常规文件有阅读权限。相当于:

find . ! -name . -prune ! -name '.*' -type f -exec test -r {} \; -print

或者使用 GNU find

find . -maxdepth 1 ! -name '.*' -type f -readable

和:

view ./*(.f-7333^f-444)

查看仅设置了读取权限位(至少一位)的非隐藏常规文件。

GNU 的等价物find

find . -maxdepth 1 ! -name '.*' -perms /444 ! -perms /7333

相关内容