查找具有特定权限的文件列表

查找具有特定权限的文件列表

我研究了 find 命令并想出了find . -maxdepth 1 -perm 521 > test.txt将权限输出到文本文件的方法,但是是否可以仅使用诸如 之类的简单命令来完成此操作ls?据我所知,ls似乎无法专门引用权限,因此我无法为其提供特定的权限集来查找。

还有其他我可能忽略的简单方法吗?

答案1

find是最简单的方法。如果你使用zsh,你可以使用它的全局限定符 f(或一堆其他限定符来单独表征权限位)。

printf '%s\n' *(f521)

或者

printf '%s\n' *(f[u=rx,g=w,o=x])

使用符号表示法(以防八进制表示法让您失望)。D如果您还希望考虑隐藏文件,请添加glob 限定符。

请注意,符号表示法也可以与 一起使用find

find . -perm u=rx,g=w,o=x

大多数find实现都有一个-ls谓词来为您提供类似于ls -l.对于那些不这样做的人,您可以随时使用-exec ls -ld -- {} +

答案2

也许,您正在搜索类似的内容:

ls -l | grep '^.r-x-w-r--'

请注意,对于具有匹配权限且名称包含换行符的文件,只会报告这些文件名的第一行。如果存在类似名称的文件foobar<newline>xr-x-w-r--(或类似名称的文件的符号链接),它也可能会给出误报。使用基于行的实用程序(例如grep.您可以通过使用-q告诉ls将不可打印字符(包括换行符)渲染为的选项来解决这个问题?

恕我直言,没有比find搜索文件更好的工具了。它简单、直接并且非常强大。使用find ... -exec ...find ... -print0 | xargs -0 ...,您可以通过多种方式轻松操作您找到的文件。我认为您找不到更好的通用工具。

答案3

如果您不喜欢,find可以使用如下标准stat工具awk

shopt -s dotglob
awk '/^521/ {print $2}' <(stat -c "%a %n" *) > test.txt

您需要设置dotglob是否应将隐藏文件包含在*.

答案4

# ls -l | grep -e "-rw-r--r--"

使用-e它将grep列出具有所需权限的所有文件。

相关内容