我研究了 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
列出具有所需权限的所有文件。