在列出目录时,是否可以查看数字Unix权限,如644,而不是符号输出-rw-rw-r——?

谢谢。


当前回答

您不使用ls来获取文件的权限信息。使用stat命令。它会给你你想要的数值。“Unix方式”说的是,你应该使用ls(或'echo *')、stat和其他任何你喜欢的东西来创建你自己的脚本,以你想要的格式提供信息。

其他回答

解决方案

奇怪的是仍然没有人提到(引用)ls的现代替代品-一个替代的和相当强大的工具。

通过使用exa命令和-l(相当于ls的-l)以及——octal-permissions选项,可以轻松实现所需的输出。


例子

下面是一个简单的例子,使用exa命令和——octal-permissions选项列出macOS机器上用户根目录(/)的内容:

exa -lh --octal-permissions /

结果:

注意,除了漂亮的彩色输出,exa还可以显示每个列的标题,这要归功于-h选项(长格式为——header)。

阅读man exa或官方在线文档,了解如何根据您的特定需求定制所需的输出。

根据选择的答案和使用别名的建议,我将其转换为一个函数,以便将目录传递给list。

# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
  LLS_PATH=$1

  ls -AHl $LLS_PATH | awk "{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/) \
                            *2^(8-i));if(k)printf(\"%0o \",k);print}"
}

它几乎可以。

 ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
             *2^(8-i));if(k)printf("%0o ",k);print}'

您不使用ls来获取文件的权限信息。使用stat命令。它会给你你想要的数值。“Unix方式”说的是,你应该使用ls(或'echo *')、stat和其他任何你喜欢的东西来创建你自己的脚本,以你想要的格式提供信息。

你可以使用GNU find。

find . -printf "%m:%f\n"